需求背景:
Springboot是Spring旗下优秀的子项目之一,其核心理念之一:约定优于配置。通过自动化的配置极大的提升了我们的开发效率,目前已集成诸多组件的starter起步依赖,帮助我们更加快速的构建标准化的应用。
starter作为springboot的一大特色,作为自动配置的核心组成,包括的优点如下:
- 快速创建独立运行的Spring项目以及与主流框架集成
- 使用嵌入式的Servlet容器,应用无需打成WAR包
- starters自动依赖与版本控制
- 大量的自动配置,简化开发,也可修改默认值
- 无需配置XML,无代码生成,开箱即用
- 准生产环境的运行时应用监控
- 与云计算的天然集成
Springboot支持自定义的starter,在开发过程中,我们若有一系列初始化配置需要在spring容器启动时完成初始化,此时我们可以把这批操作封装为一个starter,在目标项目中通过maven坐标引入。starter依赖于宿主项目的spring上下文环境,与我们传统方式在spring项目中注入bean不同,它本身可以独立开发,并打包引入到spring应用中。
以下以自动配置类作为案例。
原理
在springboot应用开发中,当我们在pom文件中引入starter组件依赖坐标时,启动Spring容器,此时应用会去依赖的Starter包中查找resources/META-INF/spring.factories文件,根据文件中配置去加载相应的自动配置类,类似于Java的SPI机制。简单的说自动配置是根据约定来的,也就是说springboot要求必须按照他给的规则开发starter才会帮你自动配置。
大致思路:
- 查找 spring.factories 中配置加载 AutoConfigure 类
- 根据目标配置类的@Condition注解条件,将相应的配置bean注入到当前spring Context上下文环境中。也可以通过@EnableConfigurationProperties将指定配置类加载进来
代码实现
1.编写自己的starter,建立springboot项目,应用名demo-springboot-starter&