구성 클래스(@Configuration 아래의 이 클래스)는 실제로 팩토리와 동일합니다. @Bean 주석으로 표시된 메서드는 팩토리 메서드
다음 예를 고려하세요.
@Configuration // 注意点1: 配置类其实相当于一个工厂, 标注 @Bean 注解的方法相当于工厂方法 static class MyConfig { @Bean public Bean1 bean1() { System.out.println("bean1()"); return new Bean1(); }
향후에 bean1의 인스턴스를 생성하려면 먼저 myConfig(팩토리)라는 Bean을 찾은 다음 이 팩토리에서 "bean1"이라는 메소드를 호출하여 bean1을 생성해야 합니다. 물체.
인스턴스 팩토리라고 하는 정적 수정이 없는 @Bean 팩토리 메소드의 경우 먼저 구성 클래스 myConfig의 인스턴스를 생성해야 합니다. 정적 수정이 있는 메소드는 정적 메소드이므로 myConfig의 클래스 객체만 가져온 다음 직접 가져오면 됩니다. 방법을 사용하십시오.
@Bean은 메소드 오버로드를 지원하지 않습니다. 오버로드된 메소드가 여러 개인 경우 하나만 팩토리 메소드로 선택할 수 있습니다.
@Configuration @MapperScan("aaa") // 注意点1: 配置类其实相当于一个工厂, 标注 @Bean 注解的方法相当于工厂方法 static class MyConfig { // 注意点2: @Bean 不支持方法重载, 如果有多个重载方法, 仅有一个能入选为工厂方法 @Bean public Bean1 bean1() { System.out.println("bean1()"); return new Bean1(); } @Bean public Bean1 bean1(@Value("${java.class.version}") String a) { System.out.println("bean1(" + a + ")"); return new Bean1(); } @Bean public Bean1 bean1(@Value("${java.class.version}") String a, @Value("${JAVA_HOME}") String b) { System.out.println("bean1(" + a + ", " + b + ")"); return new Bean1(); }
오버로드된 메소드가 있는 경우 주입해야 할 값이 더 많아집니다. 매개변수는 레벨이 높을수록 우선순위가 부여됩니다.
@Configuration은 기본적으로 주석이 달린 클래스에 대해 프록시가 생성되므로 임의로 삭제할 수 없습니다. 목적은 @Bean 메서드가 서로 호출할 때 해당 싱글톤 특성이 여전히 보장될 수 있도록 하는 것입니다.
@Configuration BeanFactory 사후 프로세서가 포함된 경우 인스턴스 팩토리 메서드로 인해 MyConfig가 미리 생성되어 종속성 주입이 실패하게 됩니다. 해결 방법은 @Bean에 대해 정적 팩토리 메서드를 사용하거나 직접 종속성 주입을 사용하는 것입니다. MapperScanner의 경우 주석을 대신 사용할 수 있습니다.
@SpringBootConfiguration 일반 @Configuration과 비교할 때 유일한 차이점은 다음과 같습니다. 전자는 전체 앱에서 한 번만 나타나도록 요구한다는 점입니다. 이를 기반으로 주요 구성 클래스가 결정되고, 주요 구성 클래스를 기준으로 전체 프로그램의 입구를 찾을 수 있기 때문입니다
@ComponentScan: Component Scan
excludeFilters - 구성요소 스캔 중에 제외하는 데 사용되며 자동 구성 클래스도 제외됩니다.
@EnableAutoConfiguration은 또한 다음 주석으로 구성된 조합 주석입니다.
@AutoConfigurationPackage – , 표시된 클래스가 기록된 패키지
@Import(AutoConfigurationImportSelector.class) META-INF/spring을 로드하는 데 사용됨 .factories의 자동 구성 클래스(자동 구성 클래스는 기본 구성 클래스가 구성되지 않은 경우를 의미함) , 자동 구성 클래스가 사용됩니다)
자동 구성 클래스를 직접 도입하기 위해 @Import를 사용하지 않는 이유
두 가지 이유가 있습니다.
@Import(AutoConfigurationImportSelector.class)
가 사용됩니다. > 약한 결합을 달성하려면 META-INF/spring.factories
에서 자동 구성 클래스를 읽으십시오. AutoConfigurationImportSelector.class
는 DeferredImportSelector 인터페이스를 구현하여 기본 구성보다 나중에 자동 구성을 구문 분석할 수 있도록 합니다. 위 내용은 Springboot 자동 구성 및 @Configuration 구성 클래스 인스턴스 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!