【springboot】手写spring-boot-starter组件
前言
starter会把所有用到的依赖包都包含进来,避免开发者自己去引入依赖所带来的麻烦。
虽然不同的starter实现起来各有差异,但是他们基本上都会使用到两个相同的内容:ConfigurationProperties和AutoConfiguration。
Starter是一组可以让你很方便的在应用增加的依赖关系描述符的集合。或者可以这样理解,平时我们开发的时候很多情况下都会有一个模块依赖另一个模块,这个时候我们一般都是采用maven的模块依赖,进行模块的依赖,但是这种情况下我们完全可以采用Starter的方式,将需要被依赖的模块用Starter的方式去开发,最后直接引入一个Starter也可以达到这样的效果。
命名规则
由于SpringBoot官方本身就提供了很多Starter,为了区别那些是官方的,哪些是第三方的,所以SpringBoot官方提出:
第三方提供的Starter统一用xxx-spring-boot-starter
而官方提供的Starter统一用spring-boot-starter-xxx。
需求
下边我们将以Redisson为例,实现一个简易版的starter组件,通过starter组件将RedissonClient所需的jar和bean依赖到我们当前项目。
项目结构
创建Starter
首先我们创建一个redisson-spring-boot-starter的项目,并添加redisson依赖和spring-boot-starter依赖,如下
编写配置类
创建一个ConfigurationProperties用于保存配置信息
创建自动化配置类
创建一个AutoConfiguration,引用定义好的配置信息
在AutoConfiguration中实现bean的注入以及配置信息的读取
把这个类加入spring.factories配置文件中进行声明
创建spring.factories
创建additional-spring-configuration-metadata.json
additional-spring-configuration-metadata.json的作用:描述配置信息,在其他项目依赖当前starter组件时起到提示的作用。
接下来,我们通过运行mvn install命令,将这个项目打成jar包部署到本地仓库,提供给另一个服务调用。
测试
创建一个测试项目,依赖redisson-spring-boot-starter 。
application.properties配置文件
测试类
测试结果
从结果中,我们看到starter中定义的RedissonClient已成功注入到测试项目中。