AutoConfiguration自动配置原理
官网配置文件指导
https://docs.spring.io/spring-boot/docs/2.2.6.RELEASE/reference/html/appendix-application-properties.html#common-application-properties
原理:
1)SpringBoot启动时加载主配置类,来气自动配置功能 @EnableAutoConfiguration
2) @EnableAutoConfiguration 利用AutoConfigurationImportSelector.class 给容器中导入组件 selectImports{}方法的内容
List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);获取候选配置
SpringFactoriesLoader.loadFactoryNames()
扫描所有jar包类路径下 "META-INF/spring.factories"
把扫描的这些文件内容包装成Properties对象
从properties中获取到EnableAutoConfiguration.class 类名对应的值,然后把他们添加在容器中。
将类路径下 "META-INF/spring.factories" 里面配置的所有EnableAutoConfiguration.class 的值加入容器中
用他们来做自动配置
3)每一个自动配置类自动配置
以HttpEncodingAutoConfiguration为例解释自动配置原理
@Configuration( //配置
proxyBeanMethods = false
)
@EnableConfigurationProperties({
HttpProperties.class})//启动,加入到ioc容器中
@ConditionalOnWebApplication( //底层@condition注解
type = Type.SERVLET
)
@ConditionalOnClass({
CharacterEncodingFilter.class})