83、高級特性-自定義starter細節

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. 配置文件多環境切換…