Spring Boot 的自动配置原理
@SpringBootApplication 注解是个组合注解
主要的是 这三个注解 (每个注解就不一 一介绍了)
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
启动配置原理是从 @EnableAutoConfiguration 开始
这个注解下面 引入了@Import(AutoConfigurationImportSelector.class) 注解,
导入了AutoConfigurationImportSelector 的类,实现了DeferredImportSelectorSpring内部在解析@Import注解时会调用getAutoConfigurationEntry方法`在这里插入代码protected AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {
if (!isEnabled(annotationMetadata)) {
return EMPTY_ENTRY;
}
AnnotationAttributes attributes = getAttributes(annotationMetadata);
List configurations = getCandidateConfigurations(annotationMetadata, attributes);
configurations = removeDuplicates(configurations);
Set exclusions = getExclusions(annotationMetadata, attributes);
checkExcludedClasses(configurations, exclusions);
configurations.removeAll(exclusions);
configurations = getConfigurationClassFilter().filter(configurations);
fireAutoConfigurationImportEvents(configurations, exclusions);
return new AutoConfigurationEntry(configurations, exclusions);
}
主要是getCandidateConfigurations 方法,下面是具体流程
Spring Boot 2.3.5 启动配置流程图