引导加载配置类
SpringBootConfiguration 表示当前是一个配置类
ComponentScan 包扫描 里面有两个 扫描器(可以细了解其用法 这里不做多描述)
重点 EnableAutoConfiguration
进入EnableAutoConfiguration
1.AutoConfigurationPackage 自动配置包
import({Registrar.class}) 往容器中注入名 Registrar的组件
利用Registrare组件 往容器中导入一系列的组件
AnnotationMetadata metadata 注解的元信息
获取包名 ![在这里插入图片描述](https://img-blog.csdnimg.cn/52ba7cf8aa4a489294f88e8ae0c6bb88.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5q2j5Ye95pWwLQ==,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
所以这一句代码的整体意思就是 把cn(主函数(main))这个包下所有带有注解的组件 导入进容器
EnableAutoConfiguration 中第二个核心注解@Import({AutoConfigurationImportSelector.class})
再一次往容器中批量导入组件
进入AutoConfigurationImportSelector
利用 里面的getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一批组件 (所有自动配置的组件)
获取所有候选的配置 返回 List configurations
configurations 集合里面所有候选的自动配置的数据
List configurations = this.getCandidateConfigurations(annotationMetadata, attributes);进入这个方法
再一次进入
利用工厂加载 下面这个(调用下面这个方法)
从这个位置加载文件(META-INF/spring.factories)默认会扫描当前系统里面所有META-INF/spring.factories位置的文件
文件里面写死了SpringBoot一启动 就要给容器中加载的配置类
虽然这写死的配置类启动场景是写死的默认全部加载但是最终会按需配置(通过条件注解来控制)
总结
1.springboot先加载所有的自动配置类
2.每个自动配置类 安装条件注解 中的条件进行生效
3. 如果自动类生效 就会在容器中注入相应场景的组件 拥有对应的功能
4. 只要用户有自己配置的就以用户优先 为什么这么说 因为 有的能替换的组件上面的条件有的是 用过没有这个组件 才配置 组件 列如 这种情况的这个注解 就可以自己创建一个bean来替代他 因为 通过前面可以得出 加载的时候先加载用户自己写的 主函数所在的包的下面的所有组件 后才加载 自动配置的 所以 自己写了可以替代的bean之后 后面自动配置类的相应的bean就不会生效 就替代了原本默认的了