深入探究 Spring Boot Starter:从概念到实践

序言

Spring Boot Starter 是 Spring Boot 生态系统中的一个核心概念,它为开发者提供了一种便捷的方式来捆绑和配置应用程序所需的依赖项。本文将深入探讨 Spring Boot Starter 的概念、原理以及如何创建自定义的 Starter。

一、什么是 Spring Boot Starter

Spring Boot Starter 实际上是一组 Maven 或 Gradle 依赖项的集合,它们可以自动配置应用程序所需的依赖项,从而简化项目的配置过程。通过引入 Starter,开发者可以快速搭建起一个功能完备的 Spring Boot 应用程序,而不必手动添加每一个依赖项。

二、Spring Boot Starter 的原理

Spring Boot Starter 的核心原理在于自动配置和条件化装配。当应用程序启动时,Spring Boot 会自动扫描类路径上的所有 Starter,并根据约定来加载相应的配置。通过条件化装配,Spring Boot 可以根据用户的环境和配置来决定是否需要加载特定的 Starter。

三、自定义 Spring Boot Starter 流程

创建自定义的 Spring Boot Starter 主要包括以下步骤:

  1. 创建项目:新建一个 Maven 项目,命名规范通常为 xxx-spring-boot-starter
  2. 添加依赖:在 pom.xml 文件中添加必要的依赖,包括 spring-boot-starterspring-boot-configuration-processor
  3. 定义配置类:创建一个配置映射类,使用 @ConfigurationProperties注解来获取对应的配置文件信息。
  4. 实现业务功能:编写一个或多个业务功能类,实现要集成功能模块的具体逻辑。
  5. 创建自动配置类:在 xxx-spring-boot-autoconfigure 项目或原项目中创建自动配置类。
  6. 创建自动装配文件:在 resources/META-INF 目录下创建 spring.factories 文件,用于 Spring Boot 自动装配。
  7. 引入自定义 Starter:在其他项目中引入自定义 Starter,只需要依赖 xxx-spring-boot-starter 即可。

四、自定义 Spring Boot Starter 案例

场景假设:我们需要创建一个名为 email-spring-boot-starter 的 starter,它可以提供自定义的邮件发送功能。

4.1 创建 Maven 项目

image.png

4.2 添加依赖

在项目的 pom.xml 文件中添加所需的依赖:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
</dependency>

<!-- 引入 lombok,业务中会用到 -->
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
</dependency>

4.3 定义配置类

// 该配置类可允许在 application.yml 文件中定义配置内容
@Data
@ConfigurationProperties(prefix = "email")
public class EmailProperties {
    @Value("${host:localhost}")
    private String host;
    @Value("${port:25}")
    private int port;
    @Value("${username:admin}")
    private String username;
    @Value("${password:admin}")
    private String password;
}

4.4 实现业务功能

实现自定义 starter 的具体业务功能。

public class EmailService {

    private final EmailProperties properties;

    public EmailService(EmailProperties properties) {
        this.properties = properties;
    }

    // 以下是发送邮件的业务逻辑
    public void sendEmail(String to, String subject, String content) {
        System.out.println("邮件服务器[" + properties.getHost() + ":" + properties.getPort() + "]");
        System.out.println("邮件服务器账号密码[username: " + properties.getUsername() + ", password: " + properties.getPassword() + "]");
        System.out.println("邮件接收人: " + to);
        System.out.println("邮件主题: " + subject);
        System.out.println("邮件内容: " + content);
    }
}

4.5 创建自动配置类

@Configuration
@EnableConfigurationProperties(EmailProperties.class)
public class EmailAutoConfiguration {

    // 自动注入业务功能
    @Bean
    public EmailService emailService(EmailProperties properties) {
        return new EmailService(properties);
    }
}

4.6 创建自动配置文件

resources/META-INF 目录下创建 spring.factories 文件,实现 Spring Boot 的自动装配

image.png

4.7 打包和安装

使用 mvn install 命令完成项目的打包和安装到本地

mvn install

4.8 使用自定义 starter

  1. 在其他项目中引入自定义的 starter

    <dependency>
      <groupId>com.qcgd</groupId>
      <artifactId>email-spring-boot-starter</artifactId>
      <version>1.0.0</version>
    </dependency>
    
  2. 使用自定义 starter 功能

    @Resource
    private EmailService emailService;
    
    @Test
    public void test() {
        emailService.sendEmail("ls@mail.com", "This is a test mail", "hello spring boot starter");
    }
    

    测试效果:

    image.png

五、总结

Spring Boot Starter 是 Spring Boot 的一个重要特性,它可以简化我们的依赖管理,让我们可以通过添加一些 starter 的依赖,就能自动引入所需的库。通过创建自定义的 starter,我们可以更好地管理我们的项目依赖,提高我们的开发效率。

推荐阅读

  1. Docker Compose:简化多容器应用部署
  2. cURL:命令行下的网络工具
  3. RabbitMQ(Docker 单机部署)
  4. 深入理解 Java 并发:AbstractQueuedSynchronizer 源码分析
  5. 深入了解 Arthas:Java 应用程序诊断利器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/609200.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

docker 安装elasticsearch8.X

docker 安装elasticsearch8.X 安装elasticsearch8.X前言安装elasticsearch安装elasticsearch-analysis-ik安装kibana 安装elasticsearch8.X 前言 由于需要安装elasticsearch、IK分词插件、kibana。所以需要保持这三者的版本一致性。 elasticsearch 8.12.2 kibana 8.12.2 ela…

科沃斯梦碎“扫地茅”,钱东奇跌落“风口”

昔日“扫地茅“不香了&#xff0c;科沃斯跌落神坛。 4月27日&#xff0c;科沃斯发布2023年报显示&#xff1a;2023年&#xff0c;科沃斯的营收为155.02亿元&#xff0c;同比增加1.16%&#xff1b;同期&#xff0c;净利为6.10亿元&#xff0c;同比减少63.96%。科沃斯的经营业绩…

Mysql数据在磁盘上的存储结构

一. 前言 一行数据的存储格式大致如下所示: 变长字段的长度列表&#xff0c;null值列表&#xff0c;数据头&#xff0c;column01的值&#xff0c;column02的值&#xff0c;column0n的值… 二. 变长字段 在MySQL里有一些字段的长度是变长的&#xff0c;是不固定的&#xff0c;…

可视化-实验五-Pyecharts工具包的使用及文本数据可视化

1.2.1 pyecharts的数据类型以及新的数据导入逻辑 由于pyecharts背后封装的js库&#xff0c;会涉及到数据类型转化。它暂时要求输入数据必须是python的基础数据类型&#xff0c;比如字符串&#xff0c;列表&#xff0c;字典&#xff0c;而不能是序列这样的数据类型。因此序列输入…

RockChip Android13 添加/删除ListPreference方法

概述: 本章将讲述在Android添加或删除ListPreference的几种方法,并以EthernetSettingsActivity为例,添加/删除一项ListPreference: 默认效果图: 添加后效果图: 方法一: 1、全部添加xml 在Activity类中使用addPreferencesFromResource()方法解析XML文件并添加Prefere…

Node.js安装与配置环境 v20.13.1(LTS)

1 下载 Node.js — Run JavaScript Everywhere LTS -- long-term support&#xff0c;长期维护版本 如果要下载其他版本在download里选择下载 2 安装 一路点击next&#xff0c;默认安装路径C:\Program Files\nodejs 3 环境变量配置 1&#xff09;Path环境变量增加nodejs安装…

艾体宝方案 | 加密USB金融解决方案

在现代金融行业中&#xff0c;保护敏感数据和合规性已成为至关重要的任务。为了帮助金融公司应对移动性风险和合规挑战&#xff0c;我们提供了一种高效的加密USB解决方案。 一、为什么金融公司需要加密USB解决方案 1、降低移动性风险 金融服务公司正在迅速过渡到一种模式&a…

将本地托管模型与 Elastic AI Assistant 结合使用的好处

作者&#xff1a;来自 Elastic James Spiteri, Dhrumil Patel 当今公共部门组织利用生成式人工智能解决安全挑战的一种方式。 凭借其筛选大量数据以发现异常模式的能力&#xff0c;生成式人工智能现在在帮助团队保护其组织免受网络威胁方面发挥着关键作用。 它还可以帮助安全专…

短信平台群发服务有什么优点

短信平台群发服务有什么优点 提高营销效率 短信平台群发服务利用自动化技术&#xff0c;可以帮助企业迅速向大量潜在客户营销信息。相比传统的逐一方式&#xff0c;群发服务可以同时大批目标客户&#xff0c;大大提高了营销效率。企业可以轻松地在短时间内覆盖更多的潜在客户&…

JavaSE——异常(2/2)-异常的处理(记录异常并提示 、尝试重新修复)

目录 记录异常并提示 案例演示 流程解析 写法优化 尝试重新修复 开发中对于异常的常见处理方式 一层一层往上抛出异常&#xff0c;并且在最上层捕获异常&#xff0c;分为两种不同的处理方式。 例如&#xff0c;B站网页报错就是采取的第一种方式&#xff1a; 记录异常并…

linux 性能监控命令之dstat

1. dstat 系统默认为安装&#xff0c;直接安装阿里源后&#xff0c;yum install -y dstat安装即可&#xff0c;该命令整合了 vmstat &#xff0c; iostat 和 ifstat&#xff0c;我们先看下效果&#xff1a; 我们先看看具体参数&#xff1a; [rootk8s-master ~]# dstat --help …

C++STL初阶(1):string的使用及初阶原理

此文作为学习stl的笔记&#xff0c;许多普及、概念性的知识点将不再罗列&#xff08;如stl的发展、背景等&#xff09; 便于读者作为复习等方法了解。 0.STL简介&#xff08;笔记向&#xff09; STL不是祖师爷本贾尼实现的&#xff0c;是在惠普实验室中实现的。其作为一个数据结…

加密“发射台”:未来通信的新模式

随着区块链技术的飞速发展&#xff0c;加密“发射台”作为一种新兴的安全通信工具&#xff0c;正逐渐受到关注。本文将从专业角度深入探讨加密“发射台”的概念、原理、应用场景及其未来发展趋势&#xff0c;以期为读者提供有深度和逻辑性的思考。 一、加密“发射台”的概念与…

开源项目介绍-02 Aubio【1】环境配置和使用 @ Ubuntu + Pycharm + Python

前言&#xff1a; aubio 是一组算法和工具&#xff0c;用于标记和变换音乐和声音。它扫描或监听音频信号&#xff0c;并尝试识别音乐事件。例如&#xff0c;当鼓被击打时&#xff0c;它能检测到音符的频率&#xff0c;或者一个有节奏的旋律的节拍是多少。 aubio 的功能包括&a…

java 文件表创建及前后端使用

表结构task_file 前端具体到业务表单 <el-form-item label"任务附件" prop"taskAttachment"><el-upload ref"upload" accept".jpg, .png, .txt, .xlsx, .doc, .docx, .xls, .pdf, .zip, .rar":action"upload.url" …

C语言例题39、输入一个正整数,将其反方向逆序输出

#include <stdio.h>void main() {int x;int ge; //个位int result 0;printf("请输入一个正整数&#xff1a;");scanf("%d", &x);while (x > 0) {//解题原理ge x % 10;//每次分解取得个位的数字result result * 10 ge;//个十百千万顺序向左…

限购仅剩6地,透过房价地图看楼市行情!

同一天&#xff0c;两地取消限购&#xff01; 5月9日&#xff0c;继杭州取消限购之后&#xff0c;西安也宣布全面取消住房限购&#xff01; 现在&#xff0c;我们透过几幅楼市数据的分布地图&#xff0c;来看看5月的楼市行情&#xff01; 楼市限购&#xff0c;仅剩6地&#…

YOLOv9改进策略 :一种新颖的通用倒瓶颈(UIB)搜索块助力检测| 轻量化之王MobileNetV4

💡💡💡创新点:轻量化之王MobileNetV4 开源 | Top-1 精度 87%,手机推理速度 3.8ms,原地起飞! 最主要创新:引入了通用倒瓶颈(UIB)搜索块,这是一个统一且灵活的结构,它融合了倒瓶颈(IB)、ConvNext、前馈网络(FFN)以及一种新颖的额外深度可分(ExtraDW)变体技…

【iOS】事件传递与响应机制

文章目录 前言事件UIEvent一、事件传递遍历顺序 二、手势识别三、响应机制UIResponder&#xff08;响应者&#xff09;响应者链 四、相关应用扩大button点击范围穿透事件 总结 前言 提到响应者链与事件传递&#xff0c;如果看过其他人的博客&#xff0c;经常能看到这经典的三张…

《探索信息技术中心一体化系统架构:提升企业数字化转型的效率与能力》

在当今数字化时代&#xff0c;信息技术中心&#xff08;IT Center&#xff09;扮演着至关重要的角色&#xff0c;它不仅是企业的技术支撑&#xff0c;更是推动数字化转型的引擎。为了更好地应对日益复杂的业务需求和技术挑战&#xff0c;许多企业开始探索一体化系统架构&#x…