Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >自研 Starter 组件/中间件开发

自研 Starter 组件/中间件开发

作者头像
IT技术小咖
发布于 2021-04-23 03:13:32
发布于 2021-04-23 03:13:32
59800
代码可运行
举报
文章被收录于专栏:码上修行码上修行
运行总次数:0
代码可运行

希望本文起到抛砖引玉的作用,比如开发黑/白名单校验组件、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 类编码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 配置类编码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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,可以设置默认值,还可以设置有条件注入等,编码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
maven clean
maven compile

重新编译项目后,配置元信息文件如下:

target/classes/META-INF/spring-configuration-metadata.json

spring-configuration-metadata.json 内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "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,内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.smart4j.extstarter.autoconfigure.StudentAutoconfigure

6. 打包发布

maven 打包命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
maven package

7. 测试自定义 Starter

创建测试 ext-spring-boot-starter 的 SpringBoot 工程:ext-test,如下:

pom 文件引入自研 starter,修改如下:

新增测试 Controller 类,编码如下:

启动测试工程,通过浏览器发送 GET 请求:

http://localhost:8080/student

返回结果:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Student{name='张三', sno='100001', sex='1', age=18, high=180}

说明 Student 类注入成功,并完成方法调用。

8. 小结

自研 Spring Boot Starter 组件/中间件的一般步骤:

  • 创建 Spring Boot 工程
  • 引入相关依赖 jar
  • 创建自动配置类
  • 生成配置元信息 json 文件
  • 创建spring.factories文件
  • 打包发布
  • 测试自研的 xxx-spring-boot-starter

#

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码上修行 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring Boot整合Redis
 Spring对Redis的支持是通过Spring Data Redis来实现的。Spring Data Redis提供了RedisTemplate和StringRedisTemplate两个模板来进行数据操作,其中StringRedisTemplate只针对键值都是字符串类型的数据进行操作。  RedisTemplate和StringRedisTemplate模板提供的主要数据访问方法如下表:
别团等shy哥发育
2023/02/25
7400
Spring Boot整合Redis
Java+MySQL实现学生信息管理系统
基于Java swing+MySQL实现学生信息管理系统:主要实现JDBC对学生信息进行增删改查,应付一般课设足矣,分享给大家。
Java团长
2018/08/07
16.7K0
Aspect切面进行统一参数处理demo
//导入 implementation('org.springframework:spring-aspects:5.3.22')
oktokeep
2024/10/09
1080
如何利用Java中的反射实现Map和JavaBean间转换
(1)后端接受一个参数Map<String,Object> param(可能是前端form维护的一个对象...)。
Java程序猿
2021/02/01
1.4K0
Spring Cloud的注册中心和服务者,消费者的构建
在pom.xml中加入如下的依赖:(但是建议springBoot的版本为1.2或者更高,一般1.5左右可以)
Dream城堡
2019/03/06
4880
Filter过滤器进行统一参数处理demo
oktokeep
2024/10/09
740
用SpringBoot+MySql+JPA实现对数据库的增删改查和分页
     JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。   使用Springboot和jpa对数据库进行操作时,能够大大减少我们的工作量,在jpa中,已经在底层封装好了增删查的功能和sql语句,可以使我们进行快速开发
泰斗贤若如
2019/06/18
2K0
SpringBoot单元测试(实例)
这里我们分别使用@WebMvcTest和@SpringBootTest两种方式测试一个控制器方法是否满足测试用例。
别团等shy哥发育
2023/02/25
1.3K0
SpringBoot单元测试(实例)
Postman使用记录,通过表格动态赋值循环调用接口 - Using CSV and JSON data files in the Postman Collection Runner
1.GET请求,通过导入csv文件来处理 GET http://localhost:8080/web/addstudent?sno={{sno}}&name={{name}}&sex={{sex}}
oktokeep
2024/10/09
1580
Postman使用记录,通过表格动态赋值循环调用接口 - Using CSV and JSON data files in the Postman Collection Runner
初识SpringBoot Web开发
虽说前端的h5和js都可以完成表单的字段验证,但是这只能是防止一些小白、误操作而已。如果是一些别有用心的人,是很容易越过这些前端验证的,有句话就是说永远不要相信客户端传递过来的数据。所以前端验证之后,后端也需要再次进行表单字段的验证,以确保数据到后端后是正确的、符合规范的。本节就简单介绍一下,在SpringBoot的时候如何进行表单验证。
端碗吹水
2020/09/23
4650
初识SpringBoot Web开发
Spring Boot如何自定义Starter
如果我们系统中想要拥有自动配置的功能,可以自己编写一个starter (启动器),想想就觉得很酷,因为这意味着我们不仅有自己定义的自动配的功能,而且具有更通用的耦合度更低的配置。
Bug开发工程师
2019/05/05
6690
Spring Boot如何自定义Starter
Spring Boot框架基础概览
Spring Boot是所有基于Spring开发的项目的起点,Spring Boot的设计是为了让你尽可能快的跑起来Spring应用程序并且尽可能减少你的配置文件,它采用了"习惯优于配置"的理念,就像Maven整合了所有的JAR包一样,Spring boot整合了所有框架
Al1ex
2022/09/07
5510
Spring Boot框架基础概览
List,Map多层循环嵌套Demo及其理解
我这边在之前写代码遇到多层(n*n)层循环嵌套逻辑的时候很头疼今天写一些demo来帮自己更好的理解相关内容
默 语
2024/11/20
1280
List,Map多层循环嵌套Demo及其理解
SpringBoot自定义Starter
在前面两章 SpringBoot入门 、SpringBoot自动配置原理 的学习后,我们对如何创建一个 SpringBoot 项目、SpringBoot 的运行原理以及自动配置等都有了一定的了解。如果我们系统中也想要拥有自动配置的功能,可以自己编写一个starter (启动器),想想就觉得很酷,因为这意味着我们不仅有自己定义的自动配的功能,而且具有更通用的耦合度更低的配置。
JAVA葵花宝典
2019/05/24
4150
Springboot前后端分离开发
.1.springboot前后端分离开发之前要配置好很多东西,这周会详细补充博客内容和遇到的问题的解析
阮键
2019/08/07
1.2K0
RequestBodyAdvice和注解方式进行统一参数处理demo
oktokeep
2024/10/09
600
Java读取csv文件Demo
此代码使用BufferedReader从CSV文件中逐行读取内容,并使用逗号分隔符将每行拆分为字符串数组。然后,它将每行数据存储在List<String[]>中。在示例的main方法中,它遍历并打印了每行数据。
默 语
2024/11/20
2190
Java读取csv文件Demo
第12章—使用NoSQL数据库—使用MongoDB+Jpa操作数据库
SpringData还提供了对多种NoSQL数据库的支持,包括MongoDB;neo4j和redis.他不仅支持自动化的repository,还支持基于模板的数据访问和映射注解.下面是一个Spring通过Jpa操作MongoDB数据库的小Demo:
Dream城堡
2018/09/10
9990
第12章—使用NoSQL数据库—使用MongoDB+Jpa操作数据库
精通 Spring Boot 系列文(9)
阅读全文,约 30 分钟 精通 Spring Boot 系列文(1) 精通 Spring Boot 系列文(2) 精通 Spring Boot 系列文(2) 精通 Spring Boot 系列文(4)
程序员小猿
2021/01/19
6160
精通 Spring Boot 系列文(9)
无聊小知识.02 Springboot starter配置自动提示
Springboot项目配置properties或yaml文件时候,会有很多spring相关的配置提示。这个是如何实现的?如果我们自己的配置属性,能否也自动提示?
有一只柴犬
2024/01/25
2710
无聊小知识.02 Springboot starter配置自动提示
推荐阅读
相关推荐
Spring Boot整合Redis
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验