在引导类的@SpringBootApplication下有@EnableAutoConfiguration
继续查看有@Import导入自动配置AutoConfigurationImportSelector
继续查看下面类的selectImports方法,返回字符串数组,在数组中定义了很多需要被加载的类。
重点查看getAutoConfigurationEntry方法中的getCandidateConfigurations方法。此方法返回一个list集合,集合中都是configurations。
继续查看getCandidateConfigurations方法,有这样的说明
No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.
所以查看对应的META-INF/spring.factories文件
EnableAutoConfiguration下的类普通情况下都会被自动加载
不普通情况就是指这些类中的条件都满足后才会加载,类中的所有@Conditional打头的条件。
总结:
- @EnableAutoConfiguration注解内部使用@Import(AutoConfigurationImportSelector.class)来加载配置类。
- 配置文件位置:META-INF/spring.factories.该配置文件定义了大量的配置类,当SpringBoot应用启动时,会自动加载这些配置类,初始化Bean
- 并不是所有的Bean都会被初始化,在配置类中使用Condition来加载满足条件的Bean