关于spring Boot自动配置原理,首先需要回归到@SpringBootApplication注解,这个注解是一个组合注解
它包括@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan 注解
1.核心注解@EnableAutoConfiguration中会Import AutoConfigurationImportSelector.class 如下
2.AutoConfigurationImportSelector.class中,使用SpringFactoriesLoader.loadFactoryNames方法扫描具有META-INF/spring.factories的文件,spring.factories文件中声明了那些自动配置,如下图
3.spring.factories声明内容
4.查看自动配置声明,可以看到autoConfiguration文件中,一般都会包含一些条件注解,例如@ConditionalOnBean,@ConditionalOnClass,@ConditionalOnMissingBean,@ConditionalOnMissingClass,@ConditionalOnJava,@ConditionalOnJndi,@ConditionalOnproperty,@ConditonalOnResource 等 如图AopAutoConfiguration
5.到这我们可以了解到,利用上述条件注解,我们也可以自己写一个AutoConfiguration.class来实现自动配置,例如使用@ConditionalOnMissimBean注解,当容器中不存在指定bean时,new一个bean并返回。此时该对象自动配置还不会生效,我们还需要在META-INF下的spring.factories中声明自己写的AutoConfiguration。
这就是spring Boot 自动配置的实现。