spring boot自动配置

@EnableAutoConfiguration

其实Spring框架自己也提供了几个名字为@Enable开头的Annotation定义,好比@EnableScheduling、@EnableCaching、@EnableMBeanExport等,@EnableAutoConfiguration的理念和这些注解实际上是一脉相承的。java

  • @EnableScheduling是经过@Import将Spring调度框架相关的bean定义都加载到IoC容器。
  • @EnableMBeanExport是经过@Import将JMX相关的bean定义加载到IoC容器。
  • @EnableAutoConfiguration也是借助@Import的帮助,将全部符合自动配置条件的bean定义加载到IoC容器。

下面是EnableAutoConfiguration注解的源码:web

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    //略
}

观察@EnableAutoConfiguration能够发现,这里Import了@EnableAutoConfigurationImportSelector,这就是Spring Boot自动化配置的“始做俑者”。spring

经过SpringFactoriesLoader.loadFactoryNames()读取了ClassPath下面的META-INF/spring.factories文件。框架

EnableAutoConfigurationImportSelector经过读取spring.factories中的key为org.springframework.boot.autoconfigure.EnableAutoConfiguration的值。如spring-boot-autoconfigure-1.5.1.RELEASE.jar中的spring.factories文件包含如下内容:spring-boot

# Auto Configure
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.webservices.WebServicesAutoConfiguration

备注:注意分割方式,以逗号进行分割。.net

#引用 Spring自动配置code

相关文章
相关标签/搜索