봄 자동 구성
@SpringBootApplication 주석에서 말하기
SpringBoot
클래스에 따라 자동으로 성가신 작성할 필요가 제거, 클래스 경로를 구성 할 xml
구성 파일을. 원래 기반으로 xml
구성 bean
자바 코드 프로그래밍 모드에 따라, 또한 다를 것이다 장면 구성에 따라 조절 구성 할 수 있습니다. 그것은 아주 똑똑하지 않다
이해하기 위해서 SpringBoot
, 자동 구성의 원리를 가장 간단한에서 SpringBoot
시작 클래스를 시작하려면 시작하는 간단한 예를 살펴
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
SpringBoot
응용 프로그램이 그것입니다 매우 간단 시작 main
방법, 다음 실행 SpringApplication
실행 방법. 먼저 실행 방법 실행 방법은 상관하지 않습니다. 우리는보고 SpringBoot
핵심 노트의 응용 프로그램@SpringBootApplication
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {
.....
}
주석이 소스 코드가 조합 주석 것을 보여준다 확인합니다.
각각 무엇을보고 각 주석
@SpringBootConfiguration
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}
코멘트는 볼 @Configuration
에 주석, 메모의 클래스의 어떤 구성 SpringBoot
에서 일반적입니다.
@CompontScan
어떤 패키지를 스캔하거나 지정된 주석을 검색하지 않습니다.
SpringBoot
응용 프로그램이 자동 구성 마법 주석이 있습니다 @EnableAutoConfiguraion
. SpringBoot 자동 SpringBoot 응용 프로그램에 @EnableAutoConfiguraion 코멘트를 달성하기 때문에 주로 구성, 그래서 수업 시작에 주석을 가입 할 수 있도록 노트가 자동으로 클래스 경로 의존성에 따라 SpringBoot 현재 프로젝트를 허용하도록 구성 할 수 있습니다 그것은 자동으로 열립니다 것이다 구성.
그래서,이 그것을 구성하는 자동화 된 주석을 달성하는 방법이다. 다음으로 우리는 발견 할.
자동 구성 뒤에 노트
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
.....
}
주석이있다, 메모의 조합 @Import(AutoConfigurationImportSelector.class)
, 다음 @Import
그것 노트 역할,보기 무엇 @Import
코드 주석 서면 소스 Indicates one or more {@link Configuration @Configuration} classes to import.Provides functionality equivalent to the {@code <import/>} element in Spring XML.
, 노트이 주석이 가져올 구성 클래스를 나타내며, 기능에 보여 Spring XML配置
의 <import>
동일
여기에 @Import
중 하나는 수입 AutoConfigurationImportSelector
과 어떤 역할을합니까? 요약 다음 의견은 알 수 @Import
가져 오기 수 ImportSelector,ImportBeanDefinitionRegistrar
(버전 4.2에서) 구현 클래스의뿐만 아니라 일반 클래스를
Allows for importing {@code @Configuration} classes, {@link ImportSelector} and {@link ImportBeanDefinitionRegistrar} implementations, as well as regular component classes (as of 4.2; analogous to {@link AnnotationConfigApplicationContext#register}).
여기에 사용, 등, 열려있는 이름으로 알려진 코멘트 관련된 말을하고 @Import은 스프링 프레임 워크 자체가 주석으로 시작하는 함수를 제공
@EnableScheduling
,@EnableCaching
,@EnableMBeanExport
등,@EnableAutoConfiguration
아이디어와이 노트가 실제로 동일 가.
@EnableScheduling
으로@Import
스프링 프레임 워크 빈 스케줄링과 관련된 정의는 IoC 컨테이너에로드됩니다.@EnableMBeanExport
을 통해@Import
IoC 컨테이너에 JMX bean 정의에로드됩니다.
@EnableAutoConfiguration
또한 의해@Import
도움, 자동 구성의 조건에 맞춰 모든 bean 정의는 IoC 컨테이너에로드됩니다.
다음 예를 무엇 EnableAutoConfigurationImportSelector이 역할에 초점을 맞 춥니 다. 주요 봄 4가 제공하는 사용하는 SpringFactoriesLoader
도구. 으로 SpringFactoriesLoader.loadFactoryNames()
다음과 같은 클래스 경로 읽기 META-INF/spring.factories
파일을
EnableAutoConfigurationImportSelector
읽어 spring.factories
키의 org.springframework.boot.autoconfigure.EnableAutoConfiguration
값입니다. 으로 파일 다음을 포함 :spring-boot-autoconfigure-1.5.1.RELEASE.jar
spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\
org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration,\
org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration,\
org.springframework.boot.autoconfigure.cassandra.CassandraAutoConfiguration,\
org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration,\
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration,\
org.springframework.boot.autoconfigure.context.MessageSourceAutoConfiguration,\
org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration,\
org.springframework.boot.autoconfigure.couchbase.CouchbaseAutoConfiguration,\
org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveDataAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraReactiveRepositoriesAutoConfiguration,\
org.springframework.boot.autoconfigure.data.cassandra.CassandraRepositoriesAutoConfiguration,\
우리는 새로운 정의 할 경우
starter
, 또한 그에서 단어starter
의jar
패키지 제공META-INFO/spring.factories
파일 및 구성org.springframework.boot.autoconfigure.EnableAutoConfiguration
대응하는 구성 클래스를
에서 EnableAutoConfiguration
CacheAutoConfiguration 구성 클래스를 찾고
@Configuration
@ConditionalOnClass(CacheManager.class)
@ConditionalOnBean(CacheAspectSupport.class)
@ConditionalOnMissingBean(value = CacheManager.class, name = "cacheResolver")
@EnableConfigurationProperties(CacheProperties.class)
@AutoConfigureAfter({ CouchbaseAutoConfiguration.class, HazelcastAutoConfiguration.class,
HibernateJpaAutoConfiguration.class, RedisAutoConfiguration.class })
@Import(CacheConfigurationImportSelector.class)
public class CacheAutoConfiguration {
@Bean
@ConditionalOnMissingBean
public CacheManagerCustomizers cacheManagerCustomizers(
ObjectProvider<List<CacheManagerCustomizer<?>>> customizers) {
return new CacheManagerCustomizers(customizers.getIfAvailable());
}
.......
}
이것은입니다 @Configuration
포함되어 구성 클래스 @Bean
메소드의 반환 값은로 등록됩니다bean
이러한 방법으로 우리는 클래스와 조건 구성 노트를 많이 참조
참고 구성의 주요 조건은 @Conditional
주석이 실현 지정하는 Condition
클래스는 구현 클래스를 matchs
메소드가 리턴하는 경우, 방법 true
의 @Conditional
수정 클래스 나 메소드가 생성됩니다 bean
. 용이하게하기 위해 Spring4
그것은 우리가 몇 가지 일반적인 조건 구성 메모를 달성 할 수있었습니다
@ConditionalOnBean
@ConditionalOnClass
@ConditionalOnExpression
@ConditionalOnMissingBean
@ConditionalOnMissingClass
@ConditionalOnNotWebApplication
지금까지 우리가 분석 한 SpringBoot
자동화 구성의 기본 원리를 우리는을 작성합니다spring-boot-starter