SpringBoot 自定义实现一个启动器starter 教程。
说明:springboot 官方给我们提供了很多启动器如:elasticsearch,aop,redis...等等
但是实际开发中,可能不同公司的业务不同需要定制化一个通用的专属的启动器来满足公司内部使用,提高开发效率。
本文将介绍怎么自定义实现一个启动器的demo流程。
一:项目结构,模式。
空项目:mystarter(用来把 启动器和自动配置模块 项目放在一起,明了)
里面有两个module:
1:启动器 sglhello-spring-boot-starter
作用:只用来做依赖导入(启动器里面依赖自动配置模块,这样外部项目直接引用启动器就可以了);
命名规范:
springboot官方的启动器: spring-boot-starter-XXX 如:spring-boot-starter-jdbc
我们自定义的启动器:XXX-spring-boot-starter 如:sglhello-spring-boot-starter
2:自动配置模块 sglhello-spring-boot-starter-autoconfigurer
作用:具体实现启动器的业务逻辑
命名规范:
XXX-spring-boot-starter-autoconfigurer
XXX最好跟启动器的XXX保持一致!
二:项目创建
idea里面 File -- New -- Project...
然后选择创建一个空项目:
project name写:mytarter
1:先创建一个启动器项目module:
选择普通的Maven项目
GroupId:com.sgl.mystarter
ArtifactId:sglhello-spring-boot-starter(也就是按照自定义启动器的命名规范创建 XXX-spring-boot-starter)
next之后需要调整下项目名称和路径:
调整为:
然后点击完成,这样启动器我们就创建好了;
2:接着创建一个自动配置模块项目module:
选择 SpringInitializr 然后next
GroupId:com.sgl.mystarter
ArtifactId:sglhello-spring-boot-starter-autoconfigurer
(按照自定配置模块的命名规范创建 XXX-spring-boot-starter-autoconfigurer)
勾选Web -- Spring Web
然后next 然后点finish完成自动配置模块的创建。
三:项目配置
1:配置启动器依赖(启动器配置文件里面添加对自动配置模块项目的依赖)
2:配置自动配置模块项目依赖
注意:这里我们把 dependencies 里面只留一个最基础的springboot对starter的支持就行了
插件的引用,web的依赖都去掉
然后我们去掉了web依赖需要清理下目录结构
删除掉test目录,配置文件,和springboot的启动类,这些都不需要
四:编写自动配置模块里的业务逻辑
HelloProperties:
/***@ClassName HelloProperties*@Description TODO 读取配置文件里面 sglhello.hello 的内容 并绑定到 HelloProperties对象上*@Author Ni Klaus*@Date 2019/10/10 0010 下午 19:29*@Version 1.0*/@ConfigurationProperties(prefix = "sglhello.hello")
public class HelloProperties {private String start;private String end;public String getStart() {return start;}public void setStart(String start) {this.start = start;}public String getEnd() {return end;}public void setEnd(String end) {this.end = end;}
}
HelloService:
/***@ClassName HelloService*@Description TODO 简单业务逻辑实现*@Author Ni Klaus*@Date 2019/10/10 0010 下午 19:47*@Version 1.0*/
public class HelloService {//读取配置类里面的配置信息HelloProperties helloProperties;public HelloProperties getHelloProperties() {return helloProperties;}//赋值配置对象public void setHelloProperties(HelloProperties helloProperties) {this.helloProperties = helloProperties;}//简单业务逻辑public String sayHellSgl(String name){return helloProperties.getStart()+"-" +name + helloProperties.getEnd();}
}
HelloServiceAutoConfiguration:
/***@ClassName HelloServiceAutoConfiguration*@Description TODO*@Author Ni Klaus*@Date 2019/10/10 0010 下午 19:48*@Version 1.0*/
@Configuration//申明这是一个配置类
@ConditionalOnWebApplication//引用启动器的项目是web应用此自动配置模块才生效
@EnableConfigurationProperties(HelloProperties.class)//加载配置对象到容器
public class HelloServiceAutoConfiguration {//注入配置对象@AutowiredHelloProperties helloProperties;@Bean//方法返回结果对象加载到容器public HelloService helloService(){//新建业务逻辑处理对象,并返回加载到容器中,// 这样引用启动器的项目就可以 @Autowired HelloService 对象直接使用了HelloService helloService = new HelloService();helloService.setHelloProperties(helloProperties);return helloService;}
}
创建XXXAutoConfiguration的扫秒配置
应为springboot再启动的过程中会去扫描项目和所有项目依赖引用的jar包 类路径下的META-INF目录下的 spring.factories
配置读取所有的拦截器,过滤器,自动配置XXXAutoConfiguration 等等
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.sgl.mystarter.sglhello.config.HelloServiceAutoConfiguration
流程:
这样其他springboot 项目 引用了启动器,因为启动器 依赖 自动配置模块,然后也会扫描 自动配置模块 的 类路径下的META-INF目录下的 spring.factories HelloServiceAutoConfiguration配置类就会被拿到,然后里面的 helloService() 方法返回的HelloService对象就会被创建并且被@Bean 注解注册到ioc容器里面,这样 springboot 项目 里面就可以 通过@Autowired 注解使用 HelloService 对象了。
五:打包并在其它项目上面引入启动器
使用maven 的 install 分别顺序 的把 自动配置模块项目 和 启动器 项目 安装到你的本机maven仓库里面
(应为启动器是依赖自动配置模块的,所以先install 自动配置模块再install 启动器)
(如果你的启动器是给开发组用的,最好把 配置模块项目 和 启动器 项目 安装到相应的maven私服仓库就行,这样别的项目引用直接引用启动器就可以了)
六:测试使用
只需要在springboot的项目里添加启动器依赖
<!--引入自定义启动器模块--><dependency><groupId>com.sgl.mystarter</groupId><artifactId>sglhello-spring-boot-starter</artifactId><version>1.0-SNAPSHOT</version></dependency>
编写一个测试登录入口:
@RestController
public class Login {//直接注入使用启动器已经加载到容器里面的HelloService 对象@AutowiredHelloService helloService;@RequestMapping("/login")public String login(){return helloService.sayHellSgl("科比");}
}
然后我们启动这个springboot项目
访问http://127.0.0.1:8080/login
发现我们的启动器已经有效果了,只是没读取到配置信息
想配置什么我只需要在当前这个springboot项目的主配置文件里面配置好就行
应为我们自动配置模块里面设置的sglhello.hello对象相关属性
所以我们可以添加如下配置文件
如:
sglhello.hello.start=NBA
sglhello.hello.end=最棒的篮球运动员
继续启动项目,访问http://127.0.0.1:8080/login
好了,已经可以了!嘿嘿
本教程只是一个SpringBoot 自定义实现一个启动器starter 的demo,如果你的业务逻辑比较复杂,只需要在你的自动配置模块项目里完成你要处理的业务逻辑就行!
本项目源码地址:https://github.com/Hak-L/mystarter
SpringBoot 自定义实现一个启动器starter 教程。相关推荐
- @configurationproperties注解的使用_徒手使用SpringBoot自定义Starter启动器
前言 在使用SpringBoot框架时,SpringBoot 最强大的功能就是把我们常用的场景抽取封装成了一个个starter,将其称之为场景启动器.搭建项目时,通过引入SpringBoot为我提供的 ...
- springboot中下面哪一个作为jpa默认实现_天天在用SpringBoot,手撸一个的Starter试试!...
引言 上篇文章<天天用SpringBoot,它的自动装配原理却说不出来>我们有说springBoot的自动装配怎么实现的,这篇文章的话我们就自己来实现一个SpringBoot的 start ...
- 【SpringBoot】编写一个自己的Starter
一.什么是Starter? 在开发过程中我们就经常使用到各种starter,比如mybatis-spring-boot-starter,只需要进行简单的配置即可使用,就像一个插件非常方便.这也是Spr ...
- springboot 加载一个properties文件转换为对象、List和Map数据结构
springboot 加载一个properties文件转换为对象.List和Map数据结构 一.springboot 加载一个properties文件转换为对象 1.1.配置文件-blog.prope ...
- SpringBoot+vue3对接支付宝支付详细教程
SpringBoot+vue3对接支付宝支付详细教程 本人也是第一次做这个,是一个刚刚学习自学支付的萌新,目的是在于学习,只是为了记录自己的学习过程,怕以后会忘记,因为我没有企业账号,所以用的是自己的 ...
- asp.NET自定义服务器控件内部细节系列教程四
如大家要转载,请保留本人的版权: /* *Description:asp.NET自定义服务器控件内部细节系列教程 *Auther:崇崇-天真的好蓝 *MSN:chongchong2008@msn.co ...
- asp.NET自定义服务器控件内部细节系列教程五
如大家要转载,请保留本人的版权: /* *Description:asp.NET自定义服务器控件内部细节系列教程 *Auther:崇崇-天真的好蓝 *MSN:chongchong2008@msn.co ...
- @retention注解作用_分分钟带你玩转SpringBoot自定义注解
在工作中,我们有时候需要将一些公共的功能封装,比如操作日志的存储,防重复提交等等.这些功能有些接口会用到,为了便于其他接口和方法的使用,做成自定义注解,侵入性更低一点.别人用的话直接注解就好.下面就来 ...
- Spring Boot的启动器Starter详解
Spring Boot的启动器Starter详解 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs Spring Boot ...
最新文章
- 微软好绝情:Windows 7再无重大更新!
- MSM8994 thermal管理
- SourceTree中如何注册atlassian账号
- 【LeetCode笔记】23.合并K个升序列表(Java、分治、链表)
- Java实现可视化迷宫
- 为什么越来越多的人喜欢自驾游?
- HDU2024 C语言合法标识符【文本处理】
- PyQt5-QTextEdit控件使用
- python 日期格式打印_Python打印格式
- ionic4 监听事件
- windows桌面上自由添加自定义文字软件--BgInfo
- 我们不一样!告诉你百度是如何做智能流量异常检测的
- jmeter压测部分参数优化
- 双拼输入法软件测试,关于双拼输入法学习的一些思考
- [亲测可行]Ubuntu16.04+opencv3.4+opencv_contrib+cuda9.0安装
- 华大单片机HC32L136X单片机flash数据读写操作使用
- videopose3d制作自己的视频转换
- AIDA64 Extreme Edition (至尊版) Business Edition (商业版) 1.85.1600 多国语言版下载及有效序列号...
- 年底被裁,程序员 2020 年的出路在哪里?,大专生出身
- Android百度地图开发(一)之初体验
热门文章
- 虚拟机php安装swoole扩展,Linux下php安装swoole扩展
- javaScript回调函数
- linux raw图片处理软件,Kandao Raw+下载-Raw图片处理软件 v1.1.2.1 官方版 - 下载吧
- 机器人动力学方程的四种形式
- 读《轻断食》的一些体会
- 有多少人等着看百度区块链的笑话?
- Invalid bound statement (not found): com.example.demo.mapper.getUser.
- Linux上使用docker运行酷Q机器人
- 数据可视化工具之常见的折线图与折现面积图分析
- Java学习总结2---Java集合类