마법의 자동 구성을 SpringBoot

봄 자동 구성

@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을 통해 @ImportIoC 컨테이너에 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.jarspring.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, 또한 그에서 단어 starterjar패키지 제공  META-INFO/spring.factories파일 및 구성 org.springframework.boot.autoconfigure.EnableAutoConfiguration대응하는 구성 클래스를

에서 EnableAutoConfigurationCacheAutoConfiguration 구성 클래스를 찾고

@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

추천

출처www.cnblogs.com/watertreestar/p/11780286.html