- @Import(AutoConfigurationImportSelector.class)
- 利用
getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件 - 调用
List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类。 - 利用工厂加载
Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的组件 - 从
META-INF/spring.factories位置来加载一个文件。- 默认扫描我们当前系统里面所有
META-INF/spring.factories位置的文件 - spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories
- 默认扫描我们当前系统里面所有
- 利用

# 文件里面写死了spring-boot一启动就要给容器中加载的所有配置类# spring-boot-autoconfigure-2.3.4.RELEASE.jar/META-INF/spring.factories# Auto Configureorg.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\...
虽然我们127个场景的所有自动配置启动的时候默认全部加载,但是xxxxAutoConfiguration按照条件装配规则(@Conditional),最终会按需配置。
如AopAutoConfiguration类:
@Configuration(proxyBeanMethods = false)@ConditionalOnProperty(prefix = "spring.aop",name = "auto",havingValue = "true",matchIfMissing = true)public class AopAutoConfiguration {public AopAutoConfiguration() {}...}
