SpringBoot自动装配和starter
自动装配
SpringBootApplication 注解中包含了EnableAutoConfiguration注解,这个注解底层又是import 注解,导入自动配置类导入选择器(AutoConfigurationImportSelecor ),这个选择器会去读取约定配置文件,从文件中一次性加载所有候选自动配置类,把这些配置类交给IOC容器,在 refresh() 中由 ConfigurationClassPostProcessor 解析,每个自动配置类上都有条件注解,满足条件 ,配置类里的 @Bean 生效 ,自动把组件注入IOC容器
流程
EnableAutoConfiguration注解,导入AutoConfigurationImportSelector
调用selectorImports方法,读取Meta-inf/spring 文件夹下的AutoConfiguration.importes文件,拿到所有自动配置类,根据配置类上的条件注解进行过滤符合条件的被加载为bean完成自动装配
条件注解
按需装配,避免冲突,如ConditionalOnMissingBean,允许用户自定义bean覆盖默认bean
Starter
Starter一键集成了某种场景,所需要的所有组件,配置。我们只要引入这个starter ,就能使用该场景,不用去找依赖,解决依赖。别人已经帮我们配好了。
原理就是,SpringBoot将组件和配置打包好,利用spi 机制和spring的条件装配,在spring启动的时候,完成一些复杂bean 的创建。
简化maven依赖配置,不用解决依赖冲突
如何自定义一个starter?
- 写好自动配置类,带上configuration 注解,条件注解,绑定配置文件注解
- 写好属性绑定类,负责配置信息属性的绑定
- 创建starter工程,引入自定义配置类模块
- 在meta-inf/spring 文件夹中,创建auto configuration.imports文件,写入自动配置类全限定名
- 将starter打包
为什么要定制starter
独立于业务的功能模块封装成starter,可以被各个项目复用。比如发送短信、解决微服务项目的数据库连接池配置问题,redis引入、鉴权组件等
