83、高级特性-自定义starter细节

自定义Spring Boot Starter可以将通用功能封装成可复用的模块,简化其他项目的配置和使用。以下是创建自定义Starter的详细步骤和关键细节:

### 1. 项目结构

通常,自定义Starter包含两个模块:

#### **自动配置模块**:`xxx-spring-boot-autoconfigure`

- 包含自动配置类、配置属性类和其他核心功能代码。

#### **Starter模块**:`xxx-spring-boot-starter`

- 依赖自动配置模块,提供依赖管理,不包含实际代码。

### 2. 创建自动配置模块

#### **添加依赖**

在`xxx-spring-boot-autoconfigure`的`pom.xml`中添加必要的依赖:

```xml

<dependencies>

    <dependency>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter</artifactId>

    </dependency>

    <!-- 添加其他需要的依赖 -->

</dependencies>

```

#### **创建自动配置类**

使用`@Configuration`注解创建自动配置类,并使用`@ConditionalOnXXX`注解控制配置的条件加载:

```java

@Configuration

@EnableConfigurationProperties(MyProperties.class)

@ConditionalOnClass(MyService.class)

public class MyAutoConfiguration {

    @Bean

    @ConditionalOnMissingBean

    public MyService myService(MyProperties properties) {

        return new MyService(properties.getMessage());

    }

}

```

- `@EnableConfigurationProperties`:启用配置属性类。

- `@ConditionalOnClass`:当类路径中存在指定类时,配置生效。

- `@ConditionalOnMissingBean`:当容器中不存在指定类型的Bean时,创建Bean。

#### **定义配置属性类**

创建用于接收外部配置的属性类,使用`@ConfigurationProperties`注解:

```java

@ConfigurationProperties(prefix = "my.starter")

public class MyProperties {

    private String message = "默认消息";

    // 提供getter和setter方法

    // ...

}

```

#### **注册自动配置类**

在`src/main/resources/META-INF/spring`目录下创建`org.springframework.boot.autoconfigure.AutoConfiguration.imports`文件,内容为:

```

com.example.autoconfigure.MyAutoConfiguration

```

### 3. 创建Starter模块

#### **添加依赖**

在`xxx-spring-boot-starter`的`pom.xml`中添加对自动配置模块的依赖:

```xml

<dependencies>

    <dependency>

        <groupId>com.example</groupId>

        <artifactId>xxx-spring-boot-autoconfigure</artifactId>

        <version>${project.version}</version>

    </dependency>

</dependencies>

```

### 4. 打包和发布

- 分别打包两个模块,将`xxx-spring-boot-starter`发布到Maven仓库或本地仓库。

### 5. 使用自定义Starter

在其他项目中添加依赖:

```xml

<dependency>

    <groupId>com.example</groupId>

    <artifactId>xxx-spring-boot-starter</artifactId>

    <version>1.0.0</version>

</dependency>

```

然后在`application.properties`或`application.yml`中进行配置:

```yaml

my:

  starter:

    message: 自定义消息

```

### 6. 关键细节

#### **命名规范**

- 自动配置模块:`xxx-spring-boot-autoconfigure`

- Starter模块:`xxx-spring-boot-starter`

#### **条件装配**

灵活运用`@ConditionalOnXXX`注解,根据条件选择性地加载配置,提高灵活性。

#### **配置属性绑定**

确保`@ConfigurationProperties`的`prefix`属性与外部配置一致。

#### **版本管理**

合理管理Starter的版本,确保与其他依赖的兼容性。

#### **文档和示例**

提供详细的文档和使用示例,方便其他开发者快速上手。

通过以上步骤和注意事项,您可以创建功能完善、易于使用的自定义Spring Boot Starter,提升开发效率和代码复用性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86578.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86578.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/86578.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

专注推理查询(ARQs):一种提升大型语言模型指令遵循度、决策准确性和防止幻觉的结构化方法

大型语言模型&#xff08;LLMs&#xff09;在客户服务、自动化内容创作和数据检索方面变得至关重要。然而&#xff0c;它们的有效性常常因其在多次交互中无法始终如一地遵循详细指令而受到限制。在金融服务和客户支持系统等高风险环境中&#xff0c;严格遵循指南是必不可少的&a…

华为云Flexus+DeepSeek征文 | DeepSeek驱动的医疗AI Agent:智能问诊系统开发完整指南

华为云FlexusDeepSeek征文 | DeepSeek驱动的医疗AI Agent&#xff1a;智能问诊系统开发完整指南 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇…

【大模型水印论文阅读2】前缀文本编码、均匀性约束

TOC &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f680; 感谢你的陪伴与支持~ 欢迎添加文末好友 &#x1f30c; 在所有感兴趣的领域扩展知识&#xff0c;不定期掉落福利资讯(*^▽^*) 写在最前面 版权声明&#xff1a;本文为原创&#xff0c;遵循 CC 4.0 BY-SA 协议。…

破茧时刻,与光同行

凌晨五点的闹钟刺破薄雾&#xff0c;我摸黑打开台灯。摊开的数学错题本上&#xff0c;函数图像在暖黄的光晕里舒展&#xff0c;像等待破译的密码。这样的清晨已持续三百多个日夜&#xff0c;我知道&#xff0c;在无数个相似的时刻里&#xff0c;总有千万盏台灯在黑暗中次第亮起…

Learning PostgresSQL读书笔记: 第8章 Triggers and Rules

本章将讨论以下内容&#xff1a; • 探索 PostgreSQL 中的规则 • 管理 PostgreSQL 中的触发器 • 事件触发器 探索 PostgreSQL 中的规则 文档中的这段话阐述了rule和trigger的区别&#xff1a; PostgreSQL 规则系统允许定义在数据库表中插入、更新或删除时执行的替代操作。粗…

信创国产化替代中的开发语言选择分析

在信息技术应用创新(信创)国产化替代过程中&#xff0c;选择合适的开发语言至关重要。以下是适合信创环境的开发语言及其优势分析&#xff1a; 主流适合信创的编程语言 1. Java 优势&#xff1a;跨平台特性(JVM)、丰富的生态体系、企业级应用成熟 信创适配&#xff1a;国内有…

Android 中 函数实现多个返回值的几种方式

在编程中&#xff0c;函数通常只能返回一个值。但通过使用对象封装、Pair、Triple、数组、列表或 Bundle 方式&#xff0c;可以轻松地返回多个值。 1、对象封装方式 创建数据类来封装需要返回的多个值。 data class Result(val code: Int, val message: String)fun getMultiV…

Leetcode百题斩-DP

又到了最好玩的dp了&#xff0c;各种玄学转移也算是其乐无穷。前段时间刚做的LCA正是这种题的小试牛刀&#xff0c;如果当时就把这个专题刷完了&#xff0c;或许我现在已经从西溪园区跑到云谷园区了。 不过&#xff0c;恐怖如斯的dp专题居然只给了一道hard&#xff0c;基本也没…

策略模式与工厂模式的黄金组合:从设计到实战

策略模式和工厂模式是软件开发中最常用的两种设计模式&#xff0c;当它们结合使用时&#xff0c;能产生11>2的效果。本文将通过实际案例&#xff0c;阐述这两种模式的协同应用&#xff0c;让代码架构更优雅、可维护性更强。 一、为什么需要组合使用&#xff1f; 单独使用的…

SAP PP模块与MM模块作用详解

SAP PP模块与MM模块作用详解 一、PP模块&#xff08;Production Planning&#xff09;—— 生产计划与执行中枢 核心作用&#xff1a;将销售需求转化为可执行的生产指令&#xff0c;管控从计划到完工的全过程。 关键功能 功能说明业务价值主数据管理维护BOM&#xff08;物料…

Linux tcp_info:监控TCP连接的秘密武器

深入解析 Linux tcp_info&#xff1a;TCP 状态的实时监控利器 在开发和运维网络服务时&#xff0c;我们常常遇到这些问题&#xff1a; 我的 TCP 连接为什么速度慢&#xff1f;是发生了重传&#xff0c;还是窗口太小&#xff1f;拥塞控制到底有没有生效&#xff1f; 这些问题…

CVE-2015-5531源码分析与漏洞复现(Elasticsearch目录遍历漏洞)

概述 漏洞名称&#xff1a;Elasticsearch 快照API目录遍历漏洞 CVE 编号&#xff1a;CVE-2015-5531 CVSS 评分&#xff1a;7.5 影响版本&#xff1a; Elasticsearch 1.0.0–1.6.0&#xff08;1.5.1及以前版本无需配置即可触发&#xff1b;1.5.2–1.6.0需配置path.repo&#xf…

HexHub开发运维利器Database, Docker, SSH, SFTP

支持隧道&#xff0c;SFTP&#xff0c;X11转发&#xff0c;跳板机&#xff0c;分屏广播输入&#xff0c;LRZSZ&#xff0c;TRZSZ&#xff0c;SCP 分屏广播输入 管理多台服务器&#xff0c;更快一步 支持多种文件传输协议 支持跨服务器文件传输&#xff0c;使用复制粘贴即可进…

2025年教育、心理健康与信息管理国际会议(EMHIM 2025)

2025 2nd International Conference on Education, Mental Health, and Information Management 一、大会信息 会议简称&#xff1a;EMHIM 2025 大会地点&#xff1a;中国三亚 收录检索&#xff1a;提交Ei Compendex,CPCI,CNKI,Google Scholar等 二、会议简介 第二届教…

数字孪生技术为UI前端注入新活力:实现智能化交互新体验

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在数字化转型的深水区&#xff0c;数字孪生技术正以破竹之势重构 UI 前端的技术逻辑与交互范式…

组件协作模式

目录 “组件协作”模式模板方法模式动机模式定义结构要点总结 “组件协作”模式 现代软件专业分工之后的第一个结果是“框架与应用程序的划分”。“组件协作”模式通过晚期绑定&#xff0c;实现框架与应用程序之间的松耦合&#xff0c;是二者之间协作时常用的模式。典型模式&a…

Docker 运行RAGFlow 搭建RAG知识库

借鉴视频&#xff1a;DeepSeek 10分钟完全本地部署 保姆级教程 断网运行 无惧隐私威胁 大语言模型 CPU GPU 混合推理32B轻松本地部署&#xff01;DeepSeek模拟王者&#xff01;&#xff01;_哔哩哔哩_bilibili 借鉴博客&#xff1a;RAGFlow搭建全攻略&#xff1a;从入门到精通…

python编写脚本每月1号和15号执行一次将TRX是否强更发送到钉钉

编写脚本 import requests import json import time import hmac import hashlib import base64 import urllib.parse# 1. 配置钉钉机器人 webhook "https://oapi.dingtalk.com/robot/send?access_tokenXXXXXX" secret "XXXXXXXX" # 如果没有加签验…

Linux-系统管理

[rootlocalhost ~]# lscpu //查看cpu [rootlocalhost etc]# cat /etc/redhat-release //查看当前目录的版本信息 [rootlocalhost ~]# ifconfig //查看当前激活的网卡信息 [rootlocalhost ~]# ifconfig ens33 192.168.1.10 //给网卡配置临时地址 [rootlocalhost ~]# hostnam…

【Spring】系统化的 Spring Boot 全栈学习教程,涵盖基础配置、核心功能、进阶实战及文档自动生成

这里写目录标题 &#x1f6e0;️ **一、环境搭建与项目创建**1. 开发环境准备2. 创建第一个项目&#xff08;Spring Initializr&#xff09; &#x1f680; **二、核心功能开发**1. RESTful API 开发2. 数据持久化&#xff08;Spring Data JPA&#xff09;3. 配置文件多环境切换…