SpringBoot 自动配置主要通过 @EnableAutoConfiguration
, @Conditional
, @EnableConfigurationProperties
或者 @ConfigurationProperties
等几个注解来进行自动配置完成的。
@EnableAutoConfiguration
开启自动配置,主要作用就是调用 Spring-Core
包的 loadFactoryNames()
,将 autoconfig
包里的已经写好的自动配置加载进来。
@Conditional
条件注解,通过判断类路径下有没有相应配置的 jar
包来确定是否加载和自动配置这个类。
@EnableConfigurationProperties
的作用就是,给自动配置提供具体的配置参数,只需要写在 application.properties
或application.yml
中,就可以通过映射写入配置类的 POJO
属性中。
@EnableAutoConfiguration
事实上是通过通过Spring的@Import
注释导入。
SpringBoot启动类@SpringBootApplication
进入@SpringBootApplication
注解类,发现使用了注解@EnableAutoConfiguration
最终发现@EnableAutoConfiguration
里使用了Spring的@Import
注解导入了AutoConfigurationImportSelector
类
找到selectImports()
方法,它调用了getAutoConfigurationEntry
方法,getAutoConfigurationEntry
方法又调用了getCandidateConfigurations()
方法,这个方法又调用了spring-core包中的SpringFactoriesLoader.loadFactoryNames
方法。这个方法的作用是,会加载所有JAR包中的META-INF/spring.factories
文件,并加载其中以EnableAutoConfiguration.class
全类名为key的自动配置文件类名列表
selectImports
方法
1 |
|
getAutoConfigurationEntry
方法
1 | /** |