SpringBoot自动化配置原理和自定义starter方式
作者:又旅行又开拓的绳匠..
SpringBoot自动化配置原理和自定义starter

SpringBootConfiguration
底层是一个Configuration,表示启动类也是一个配置类,可以在内部定义相关Bean
ComponentScan
表示组件扫描,默认会扫描启动类包及子包下Spring能识别的组件
EnableAutoConfiguration
底层是一个Import注解

该注解中导入 AutoConfigurationImportSelector类,该类最终实现了ImportSelector


该类中有一个 selectImports 方法会被调用,

selectImports()方法底层调用getAutoConfigurationEntry()方法,获取可自动配置的配置类信息集合

getAutoConfigurationEntry()方法通过调用getCandidateConfigurations(annotationMetadata, attributes)方法获取在配置文件中配置的所有自动配置类的集合

获取所有基于 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中配置类的集合
并筛选满足starter和各种Condtional条件的全类名,封装成一个字符串数组加载到内存中
启动类会通过run方法去创建与初始化Spring容器,在初始化时会把上面注解加载到内存中的字符串数组对应的内容,创建成对象注入到Spring容器,至此就完成了自动化装配
自定义starte
创建自定义starter模块 方法名-spring-boot-starter(进行依赖管理)
把所有的依赖统一管理起来
创建autoconfigure模块 方法名-spring-boot-autoconfigure
在starter中引入autoconfigure (只需要引入starter起步依赖即可)
在autoconfigure模块方法名-spring-boot-autoconfigure中完成自动配置
定义一个自动配置类,在自动配置类中将所要配置的bean都提前配置好
定义配置文件,把自动配置类的全类名定义在配置文件(META-INF/spring/xxxx.imports)中
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
