当前位置: 首页 > news >正文

自定义 SpringBoot starter

文章目录

      • 是什么?
      • 优点
      • 缺点
      • 自定义实现 starter
        • 1. 确定功能和依赖
        • 2. 创建 Maven 或 Gradle 项目
        • 3. 编写自动配置类
        • 4. 编写 Starter 类
        • 5. 编写 Starter 的属性配置类
        • 6. 编写 Spring Boot Starter Metadata 文件
        • 7. 编写 README 和文档

是什么?

Spring Boot Starter 是 Spring Boot 的一个核心概念,它是一种约定俗成的方式,用于快速集成和配置 Spring 应用程序所需的依赖项。

优点

  1. 简化依赖管理:Spring Boot Starter 将相关的依赖项打包在一起,使得项目配置和依赖管理变得更加简单和一致。

  2. 快速启动应用程序:Starter 提供了预配置的默认选项,可以快速启动 Spring 应用程序,减少了繁琐的配置过程。

  3. 约定优于配置:遵循了 Spring Boot 的设计原则,通过约定俗成的方式,使得开发者可以专注于业务逻辑而非配置。

  4. 自动配置:Spring Boot Starter 提供了自动配置的能力,根据应用程序的依赖和环境,自动配置 Spring 应用程序的各种组件。

  5. 生态系统支持:Spring Boot 社区和第三方开发者提供了大量的 Starter,覆盖了几乎所有常见的应用场景和集成需求。

缺点

  1. 过度依赖:有时候会出现过度依赖的情况,即项目中引入了不必要的 Starter,导致项目的依赖关系复杂化。

  2. 不灵活:某些情况下,Starter 提供的默认配置可能不符合特定的需求,需要额外的配置或者自定义。

自定义实现 starter

1. 确定功能和依赖

首先,确定 Starter 的功能和依赖。这可能包括需要集成的库、配置文件、自动配置类等。

2. 创建 Maven 或 Gradle 项目

创建一个新的 Maven 或 Gradle 项目作为 Starter 的基础。确保项目的结构和命名符合 Maven 或 Gradle 的约定。

3. 编写自动配置类

编写一个自动配置类,通常命名为 XxxAutoConfiguration,其中 Xxx 是你的 Starter 的名称。在这个类中,可以使用 @Configuration@ConditionalOnClass@ConditionalOnProperty 等注解来定义自动配置的条件和行为。例如

package com.example.welcome.autoconfigure;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@ConditionalOnClass(WelcomeService.class)
public class WelcomeAutoConfiguration {@Beanpublic WelcomeService welcomeService() {return new WelcomeService();}
}

@ConditionalOnClass(WelcomeService.class) 是 Spring Boot 中的一个条件注解,它的意思是:只有当类路径中存在 WelcomeService 类时,才会生效配置。

4. 编写 Starter 类

编写一个 Starter 类,通常命名为 XxxStarter,这个类应该是一个普通的 Java 类,用来暴露 Starter 的主要功能和接口。

5. 编写 Starter 的属性配置类

如果需要用户配置属性,可以编写一个属性配置类(通常命名为 XxxProperties),并使用 @ConfigurationProperties 注解来映射配置文件中的属性到这个类中。

package com.example.welcome.autoconfigure;import org.springframework.boot.context.properties.ConfigurationProperties;@ConfigurationProperties(prefix = "welcome")
public class WelcomeProperties {private String message = "Welcome to Spring Boot Starter!";public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}
}
6. 编写 Spring Boot Starter Metadata 文件
  • SpringBoot 2.7 以下版本,在 src/main/resources/META-INF/spring.factories 文件中,指定自动配置类,这样 SpringBoot 在启动时会自动加载你的自动配置。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.welcome.autoconfigure.WelcomeAutoConfiguration
  • Spring Boot 2.7 开始,不再推荐使用 spring.factories,而是改用在 src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中,指定自动配置类,每个自动配置类的全类名单独一行。(在 Spring Boot 3 开始将移除对 /META-INF/spring.factories 的支持)
com.example.welcome.autoconfigure.WelcomeAutoConfiguration
7. 编写 README 和文档

为了使 Starter 更易于使用,编写清晰的 README 文件和文档,描述如何引入、配置和使用 Starter。

相关文章:

  • 文件操作和IO
  • 构建深度学习驱动的多目标检测系统:YOLO模型及应用
  • 高并发内存池
  • Jupyter Notebook 常用快捷键和魔法命令
  • vue中子传父之间通信(this.$emit触发父组件方法和.sync修饰符与$emit(update:xxx))
  • 低GI功能大米升温:千亿规模潜力,解决八成慢病老人主食难题
  • 【栈和队列】常见面试题
  • P1104 生日
  • Linux:多线程(二.理解pthread_t、线程互斥与同步、基于阻塞队列的生产消费模型)
  • MySQL的基本操作
  • NET 定时器 Timer和线程Thread
  • 试用AWS全新神器:Amazon Bedrock的「Open Artifacts」版Claude.ai Artifacts
  • app:layout_constrainedWidth=“true“ 在 compose 中怎么写, constraintlayout 强约束
  • 机器学习——第十章 降维与度量学习
  • Pytorch添加自定义算子之(11)-C++应用程序将onnx模型编译并转成tensorrt可执行模型
  • 【EOS】Cleos基础
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • Mybatis初体验
  • mysql常用命令汇总
  • node学习系列之简单文件上传
  • PAT A1092
  • Promise初体验
  • Python_网络编程
  • Python实现BT种子转化为磁力链接【实战】
  • React Transition Group -- Transition 组件
  • vue2.0项目引入element-ui
  • 技术:超级实用的电脑小技巧
  • 日剧·日综资源集合(建议收藏)
  • 使用Swoole加速Laravel(正式环境中)
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 函数计算新功能-----支持C#函数
  • 如何用纯 CSS 创作一个货车 loader
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​低代码平台的核心价值与优势
  • "无招胜有招"nbsp;史上最全的互…
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #pragma pack(1)
  • (js)循环条件满足时终止循环
  • (poj1.2.1)1970(筛选法模拟)
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (七)Java对象在Hibernate持久化层的状态
  • (三十五)大数据实战——Superset可视化平台搭建
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (五)activiti-modeler 编辑器初步优化
  • (转)Linq学习笔记
  • (转载)hibernate缓存
  • (自用)交互协议设计——protobuf序列化
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .a文件和.so文件