希望本文起到抛砖引玉的作用,比如开发黑/白名单校验组件、kafka日志组件、ORM组件、工具类组件、配置中心组件等等,可以参考 spring boot 官方的 starter 组件示例进行自研自己的 Starter。
本文目录结构
1. 创建 SpringBoot 工程
通过 IDEA 或 https://start.spring.io/ 快速创建 SpringBoot 工程
或
2. 引入 spring-boot-starter、spring-boot-configure 及相应的第三方 jar 依赖
pom 文件如下:
这里引入的第三方 jar ,是一个简单的 springboot 工程,结构如下,只包含一个 Student 类,其中引入的第三方 jar 可以是自定义的 jar 或是其他的第三方 jar,如 jdbc、redis、kafka 等等。
Student 类编码如下:
package cn.smart4j.extjar.entity;
/**
* @program: ext-starter
*
* @description:
*
* @author: Mr.Zhang
*
* @create: 2021-04-11 12:05
**/
public class Student {
/**
* 姓名
*/
private String name;
/**
* 学号
*/
private String sno;
/**
* 性别
*/
private String sex;
/**
* 年龄
*/
private Integer age;
/**
* 身高
*/
private Integer high;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getHigh() {
return high;
}
public void setHigh(Integer high) {
this.high = high;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", sno='" + sno + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", high=" + high +
'}';
}
}
自研 starter 工程的目录结构如下:
3. 创建自动配置类
StudentProperties 配置类编码如下:
package cn.smart4j.extstarter.autoconfigure;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* @program: ext-starter
*
* @description:
*
* @author: Mr.Zhang
*
* @create: 2021-04-11 12:15
**/
@ConfigurationProperties(prefix = "cn.smart4j")
public class StudentProperties {
/**
* 姓名
*/
private String name;
/**
* 学号
*/
private String sno;
/**
* 性别
*/
private String sex;
/**
* 年龄
*/
private Integer age;
/**
* 身高
*/
private Integer high;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSno() {
return sno;
}
public void setSno(String sno) {
this.sno = sno;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getHigh() {
return high;
}
public void setHigh(Integer high) {
this.high = high;
}
@Override
public String toString() {
return "StudentProperties{" +
"name='" + name + '\'' +
", sno='" + sno + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", high=" + high +
'}';
}
}
StudentAutoconfigure 自动配置类中返回需要的 Bean,可以设置默认值,还可以设置有条件注入等,编码如下:
package cn.smart4j.extstarter.autoconfigure;
import cn.smart4j.extjar.entity.Student;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @program: ext-starter
*
* @description:
*
* @author: Mr.Zhang
*
* @create: 2021-04-11 12:17
**/
@Configuration
@EnableConfigurationProperties(StudentProperties.class)
public class StudentAutoconfigure {
@Bean
public Student getStudent(StudentProperties sp) {
Student stu = new Student();
stu.setName(sp.getName());
stu.setSno(sp.getSno());
stu.setSex(sp.getSex());
stu.setAge(sp.getAge());
stu.setHigh(sp.getHigh());
return stu;
}
}
4. 生成配置元信息
引入 spring-boot-configuration-processor 依赖
maven 命令如下:
maven clean
maven compile
重新编译项目后,配置元信息文件如下:
target/classes/META-INF/spring-configuration-metadata.json
spring-configuration-metadata.json 内容如下:
{
"groups": [
{
"name": "cn.smart4j",
"type": "cn.smart4j.extstarter.autoconfigure.StudentProperties",
"sourceType": "cn.smart4j.extstarter.autoconfigure.StudentProperties"
}
],
"properties": [
{
"name": "cn.smart4j.age",
"type": "java.lang.Integer",
"description": "年龄",
"sourceType": "cn.smart4j.extstarter.autoconfigure.StudentProperties"
},
{
"name": "cn.smart4j.high",
"type": "java.lang.Integer",
"description": "身高",
"sourceType": "cn.smart4j.extstarter.autoconfigure.StudentProperties"
},
{
"name": "cn.smart4j.name",
"type": "java.lang.String",
"description": "姓名",
"sourceType": "cn.smart4j.extstarter.autoconfigure.StudentProperties"
},
{
"name": "cn.smart4j.sex",
"type": "java.lang.String",
"description": "性别",
"sourceType": "cn.smart4j.extstarter.autoconfigure.StudentProperties"
},
{
"name": "cn.smart4j.sno",
"type": "java.lang.String",
"description": "学号",
"sourceType": "cn.smart4j.extstarter.autoconfigure.StudentProperties"
}
],
"hints": []
}
5. 创建发现配置文件
在 resource 文件夹下创建对应目录和文件:META-INF/spring.factories,内容如下:
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.smart4j.extstarter.autoconfigure.StudentAutoconfigure
6. 打包发布
maven 打包命令如下:
maven package
7. 测试自定义 Starter
创建测试 ext-spring-boot-starter 的 SpringBoot 工程:ext-test,如下:
pom 文件引入自研 starter,修改如下:
新增测试 Controller 类,编码如下:
启动测试工程,通过浏览器发送 GET 请求:
http://localhost:8080/student
返回结果:
Student{name='张三', sno='100001', sex='1', age=18, high=180}
说明 Student 类注入成功,并完成方法调用。
8. 小结
自研 Spring Boot Starter 组件/中间件的一般步骤:
#
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有