SpringBoot 自动配置原理:
1.springboot启动的时候,从主方法启动
@ImportResource(locations = {"classpath:beans.xml"})*/
@SpringBootApplication
public class SpringBoot01HelloworldQuickApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBoot01HelloworldQuickApplication.class, args);
}
}
加载加载了@SpringBootApplication注解;@SpringBootApplication注解,开启了一个@EnableAutoConfiguration注解的自动配置功能、
打开@EnableAutoConfiguration注解,里面利EnableAutoConfigurationImportSelector选择器给Spring容器中来导入一些组件。
打EnableAutoConfigurationImportSelector选择器查看究竟导入哪些组件?
查看selectImports()函数-----
1.在selectImports这个方法里面主要有个 configurations,并且这个configurations最终会被返回。
这个configurations它是获取候选的配置。
List<String> configurations = getCandidateConfigurations(annotationMetadata,attributes);
2..l利用loadFactoryNames方法从类路径下得到一个资源
即扫描javajar包类路径下的“META-INF/spring.factories”这个文件
3. 扫描到的这些文件,最终把这些文件整成一个properties对象
**4.**然后它从properties对象里边获取一些值,把这些获取到的值来加载我们最终要返回的这个结果,这个结果就是我们要交给Spring容器中的所有组件,这相当于这factoryClassName就是我们传过来的Class的这个类名。
5传过来的Class是调用这个
getSpringFactoriesLoaderFactoryClass()这个方法得到从properties中获取到EnableAutoConfiguration.class类名对应的值