springboot的主启动类springbootApplication
类中有一个注解@SpringbooApplication
这个注解中又包含@CompentScan,负责扫描xml配置的bean,将其加入到ioc容器中
@SpringbootConfiguration表示是一个SpringBoot的配置类
他下面又有两个注解@Configuration和@Component
@Configuration表示这是一个配置类,配置类对应Spring的xml配置文件
@Component是表示这是一个组件bean
回到之前与@SpringbootConfiguration同级的@EnableAutoConfiguration注解,作用是开启自动配置功能
她下面有个@AutoConfigurationPackage,自动配置包
@import Spring的底层组件,给容器中导入一个组件
@Import({Register.class})给容器导入组件
这个Register是具体的,实际上是AutoConfigurationImportSelector,即自动配置导入选择器
进入代码,方法getCandidateConfigurations(参数a,参数b),返回的就是最开始看的启动自动导入配置文件的注解类EnableAutoConfiguration
上面的方法其实调用了SpringFactoriesLoader的静态方法loadFactoryNames()方法
这个方法又调用了loadSpringFactories方法
这个类读取了resoures文件下的MATA-INF中的spring.factories文件中的内容
这就是自动配置根源所在
自动配置原理
根据不同的条件决定配置类是否生效,生效就向容器中添加各种组件
组件的属性从对应的properties类中获取
配置文件能配置什么就可以参照某个功能对应的这个属性类
上面的内容都是基于理论的知识,在工作中我们常需要自己定义包(也不一定手动狗头)
最佳的实践就是自己写一个包,然后创建Maven项目引入这个包。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。