自动配置:springboot和其他组件(redis、mybatis-plus)整合时,原先要由程序员注入的对象,如redis的RedisTemplate类型对象,现在由springboot来注入,程序员只需要通过注解自动装配后使用即可。
如何将对象注入容器?
既然是springboot,通过配置类注入更符合它的身份,那么自动配置最朴素的流程就是,当我们通过坐标添加相关组件依赖时同时会有已经写好的相关组件的用来迎合自动配置创建好的自动配置相关的配置类。springboot按照约定到指定目录下找到相关配置类的路径,将配置类注入到容器,相应的配置类中的配置也同时生效。
其中有两个细节,一个是springboot如何找到相关配置类的路径,这肯定是某种约定好的,一个是拿到路径后如何将配置类注入,一般手动会选择扫描配置类相关的包路径。
揭示这两个细节
配置类路径(配置类的全限定名称)
以两个版本为例
举出两个版本是因为有一点细微区别
相同点:
springboot都会在对应的autoconfigure包(例如:org.springframework.boot:spring-boot-autoconfigure)下的META-INF目录下找名为spring.factories的文件
其中都是按键值对来存放数据,org.springframework.boot.autoconfigure.EnableAutoConfiguration 对应都是springboot自动配置相关的配置类的类路径
区别:
springboot2.6.1
适应于相同点
springboot2.7.14
会多一个spring的目录,自动配置相关的内容保存在
org.springframework.boot.autoconfigure.AutoConfiguration.imports中
配置类注入容器
@Import({AutoConfigurationImportSelector.class})
该注解的功能就是将配置类注入容器
实现ImportSelector接口,重写selectImports方法,方法返回的字符串数组中的每一个都是类的全限定名,将这些全限定名指向的配置类注入容器
按照上面的思路自定义自动配置
springboot默认自动配置中配置类个数144
定义启动器
pom文件导入自动配置的坐标
定义自动配置
在resources目录下创建如下内容
文件中写入
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.xc.config.HuConfig
主项目pom文件中引入启动器坐标
测试:
成功获取自定义配置类全限定名称(路径)
成功验证配置类注入