如何自定义个一个开箱即用可以配置的SpringBoot的starter
记录如何创建一个自定义(输出请求地址ip)开箱即用的starter,我目前使用的SpringBoot的版本是2.6的版本,代码比较简单涉及的文件比较多所以选择直接截图的方式记录了
目录
一、创建一个SpringBoot项目
命名按照正常的starter来定义就行(xxx-spring-boot-starter),当然也可以随意命名,没什么大影响,添加两个所需依赖
lombok不用解释了吧,另外一个依赖是为了你在写配置文件的时候有提示比较方便的
二、编码自定义starter
1.自定义starter中引用所需的pom文件
刚才少添加了一个web的starter,记得加回来不然没法使用Spring的注入接口,这几个就足够了,也可以根据自己的starter需求添加对应依赖
2.新建一个接口和实现类
新建api包并创建PrintIpService接口和PrintIpServiceImpl实现类,在实现类里面书写我们主要的核心功能
3.新建configure包并创建configure配置类,实例化对象
4.将配置类引入到spring环境中
resource -> META-INF -> spring.factories
在resource中创建META-INF文件夹,然后再文件夹内创建spring.factories文件,并在文件中添加下面一句话,等号后面的值是自己配置类的全路径包名
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xiaoliu.configure.PrintIpAutoConfigure
三、将starter放到Maven仓库中,双击install
到此一个简单的输出请求ip的starter就创建完成了
四、创建测试工程PrintIp-test
1.添加starter依赖
创建测试工程就不贴图和之前黑丝一样的,在测试工程的pom文件中添加我们自定义的依赖。这里依赖就是我们自定义starter项目的pom文件的前几行代码,把groupId和artifactId以及version对应起来就行了
2.编写一个简单的接口并在其中注入我们的PrintIpService
五、启动测试工程PrintIp-test并访问mystarter接口
测试成功,控制台能正确输出我们的请求IP
此时的自定义starter还不能够满足开箱即用的特点,即便引入了相关依赖还需要我们在需要的地方手动的注入,下面我们将借助interceptor拦截器来帮我们实现开箱即用的特点,并且添加调用方可配置的输出格式
六、添加拦截器
在starter项目中添加拦截器PrintIpInterceptor和SpringMvcConfig类将自定义拦截器加到Spring中,将之前在测试工程的接口中注入和手动调用PrintIpService方法的代码放到拦截器中
到这里就已经实现了开箱即用的特点,无需调用方在手动编写代码,只要引入我们自己定义的starter依赖即可实现请求ip的输出
七、增加属性配置项
通过配置文件可以修改starter的输出格式
1.创建一个样式配置类PrintIpStyleConfig和一个样式枚举类
2.修改PrintIpServiceImpl中打印功能代码
根据调用方配置的不同值显示不同的样式,默认是default
3.重新install自定义的starter
八、在Print-test工程中刷新Maven然后添加配置代码
根据配置的Style的值来控制输出格式,不配置走默认样式
九、重启测试工程进行测试
默认样式,不配置也是当前样式因为在starter中配了默认值
配置详情样式
到目前为止一个简单的开箱即用可以配置的输出请求IP的自定义starter就完成了,可以按照个人需求去定义个性化的starter