今天来讲讲springboot自动配置文件读取以及源码分析

springboot启动之后
1.首先进入@springbootApplication(如上图)
里面的**@EnableAutoConfiguration注解
2.点进@EnableAutoConfiguration**里面
@Import导入的这个类点进去(这个类的就是将所有的自动配置类导进去容器中)
3.进去点进去(点圆圈标注的那个类)
这个类实现了变种的ImportSelector类,就是DeferredImportSelector类
这个类会根据它里面的getImportGroup()方法判断
4.如果这个方法返回的类实现了Group接口,那么他就会调用本类的process()方法
然后调用这个方法里面的getAutoConfigurationEntry方法获取所有的有效配
置类
这个方法里面是调用getCandidateConfigurations方法(这个方法是获取所有的127个配置类)
4.接下来看看是怎样读取到这127个配置类的

getCandidateConfigurations方法里面的loadFactoryNames方法是获取这127个配置类的关键,
loadFactoryNames方法里面的loadSpringFactories方法先去所有的jar包和类路径下去找META–INF/spring.factories
有哪些jar包有它需要的spring.factories
1.spring-boot
2.spring-beans
3.spring-boot-autoconfigure
没错,就是这3个jar包
获取完这3个jar包里面的所有的扩展类,
loadFactoryNames方法后继续调用getOrDefault方法完成一个过滤
怎样过滤的呢
loadSpringFactories
.getOrDefault会做一个配置类名过滤,只需要EnableAutoConfigurations为key值的配置类
最后剩下127个有效自动配置类
getCandidateConfigurations执行完之后再执行getConfigurationClassFilter().filter(configurations)
或取真正有用的配置类
这样process方法筛选出项目中需要的有效配置类
5.调用完process方法之后获得的是有效的并且项目中用得到的的配值类后,
再继续调用selectImports()方法,对这些有效类名做个排序什么的
最后,我自己对于springboot自动配置类读取流程的理解就是这些,可能理解的害不够透彻,欢迎大神来补充,欲知springboot自动配置原理且看下篇博客。
