如何自定義一個(gè)SpringBoot?Starter(步驟和代碼示例)
創(chuàng)建自定義 Spring Boot Starter 涉及封裝特定功能供其他項(xiàng)目復(fù)用。以下是詳細(xì)步驟和代碼示例:
核心步驟
?項(xiàng)目結(jié)構(gòu)?
創(chuàng)建 Maven 項(xiàng)目(兩個(gè)模塊):
my-starter-parent ├── my-spring-boot-autoconfigure // 自動(dòng)配置核心 └── my-spring-boot-starter // 輕量依賴聚合
1. 創(chuàng)建自動(dòng)配置模塊 (my-spring-boot-autoconfigure)
① POM 依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<version>3.1.0</version>
<optional>true</optional>
</dependency>
</dependencies>② 創(chuàng)建配置屬性類
@ConfigurationProperties(prefix = "my.service")
public class MyServiceProperties {
private String prefix = "Hello";
private String suffix = "!";
// 省略 getter/setter
}③ 編寫業(yè)務(wù)服務(wù)類
public class MyService {
private final String prefix;
private final String suffix;
public MyService(String prefix, String suffix) {
this.prefix = prefix;
this.suffix = suffix;
}
public String greet(String name) {
return prefix + " " + name + suffix;
}
}④ 自動(dòng)配置類(核心)
@Configuration
@EnableConfigurationProperties(MyServiceProperties.class)
@ConditionalOnClass(MyService.class) // 類路徑存在時(shí)生效
@ConditionalOnProperty(prefix = "my.service", name = "enabled", matchIfMissing = true)
public class MyServiceAutoConfiguration {
@Bean
@ConditionalOnMissingBean // 用戶未定義時(shí)初始化
public MyService myService(MyServiceProperties properties) {
return new MyService(properties.getPrefix(), properties.getSuffix());
}
}⑤ 注冊(cè)自動(dòng)配置
在 src/main/resources/META-INF/spring/創(chuàng)建文件:
?文件路徑: org.springframework.boot.autoconfigure.AutoConfiguration.imports
com.example.autoconfigure.MyServiceAutoConfiguration
2. 創(chuàng)建 Starter 模塊 (my-spring-boot-starter)
POM 配置
<dependencies>
<dependency>
<groupId>com.example</groupId>
<artifactId>my-spring-boot-autoconfigure</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>?? ?關(guān)鍵點(diǎn)?:Starter 本身無(wú)代碼,僅聚合依賴
3. 安裝到本地倉(cāng)庫(kù)
mvn clean install
4. 在其他項(xiàng)目中使用
添加依賴
<dependency>
<groupId>com.example</groupId>
<artifactId>my-spring-boot-starter</artifactId>
<version>1.0.0</version>
</dependency>配置參數(shù) (application.yml)
my:
service:
prefix: "Welcome"
suffix: "!!!"
# enabled: true # 默認(rèn)啟用代碼調(diào)用
@RestController
public class DemoController {
@Autowired
private MyService myService;
@GetMapping("/greet")
public String greet(String name) {
return myService.greet(name);
}
}高級(jí)配置技巧
?條件化Bean?
使用 Spring Boot 的條件注解控制Bean創(chuàng)建:
@Bean
@ConditionalOnWebApplication // 僅Web環(huán)境生效
@ConditionalOnMissingBean
public MyWebService myWebService() {...}?自定義指標(biāo)監(jiān)控?
集成 Micrometer 暴露指標(biāo):
@Bean
public MyServiceMetrics myServiceMetrics(MyService service) {
return new MyServiceMetrics(service);
}?Starter 元數(shù)據(jù)?
在 autoconfigure模塊的 META-INF/spring-configuration-metadata.json中添加配置提示:
{
"properties": [
{
"name": "my.service.prefix",
"type": "java.lang.String",
"defaultValue": "Hello",
"description": "Custom greeting prefix."
}
]
}調(diào)試技巧
啟用 debug 模式查看自動(dòng)配置報(bào)告:
debug: true
檢查 Condition Evaluation Report 中的 Positive matches和 Negative matches
通過(guò)以上步驟,您已創(chuàng)建了一個(gè)可復(fù)用、可配置的 Spring Boot Starter。關(guān)鍵點(diǎn)在于解耦自動(dòng)配置與依賴管理,并遵循 Spring Boot 的約定大于配置原則。實(shí)際開發(fā)中可結(jié)合具體需求擴(kuò)展錯(cuò)誤處理、健康檢查等企業(yè)級(jí)特性。
到此這篇關(guān)于如何自定義一個(gè)SpringBoot Starter(步驟和代碼示例)的文章就介紹到這了,更多相關(guān)自定義SpringBoot Starter內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java基礎(chǔ)之TreeMap實(shí)現(xiàn)類全面詳解
這篇文章主要為大家介紹了java基礎(chǔ)之TreeMap實(shí)現(xiàn)類全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-12-12
基于Springboot實(shí)現(xiàn)送水公司信息管理系統(tǒng)
這篇文章主要介紹了基于Springboot實(shí)現(xiàn)送水公司信息管理,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
springboot整合websocket實(shí)現(xiàn)群聊思路代碼詳解
通過(guò)springboot引入websocket,實(shí)現(xiàn)群聊,通過(guò)在線websocket測(cè)試進(jìn)行展示。本文重點(diǎn)給大家介紹springboot整合websocket實(shí)現(xiàn)群聊功能,代碼超級(jí)簡(jiǎn)單,感興趣的朋友跟隨小編一起學(xué)習(xí)吧2021-05-05
IDEA創(chuàng)建springboot + mybatis項(xiàng)目全過(guò)程(步驟詳解)
這篇文章主要介紹了IDEA創(chuàng)建springboot + mybatis項(xiàng)目全過(guò)程及步驟詳解,本文通圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
SpringBoot通過(guò)構(gòu)造函數(shù)依賴注入實(shí)現(xiàn)過(guò)程
Spring Boot推薦構(gòu)造函數(shù)注入替代@Autowired,避免編輯器警告,使用@AllArgsConstructor生成全屬性構(gòu)造函數(shù),但通過(guò)final關(guān)鍵字可優(yōu)化,僅生成需注入字段的構(gòu)造函數(shù),減少冗余2025-08-08
一篇文章教你使用SpringBoot如何實(shí)現(xiàn)定時(shí)任務(wù)
這篇文章主要給大家介紹了關(guān)于如何利用一篇文章教你使用SpringBoot實(shí)現(xiàn)定時(shí)任務(wù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
springboot讀取文件,打成jar包后訪問(wèn)不到的解決
這篇文章主要介紹了springboot讀取文件,打成jar包后訪問(wèn)不到的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
Java中Excel高效解析工具EasyExcel的實(shí)踐
EasyExcel是阿里巴巴開源的一個(gè)excel處理框架,已使用簡(jiǎn)單,節(jié)省內(nèi)存著稱,下面這篇文章主要給大家介紹了關(guān)于Java中Excel高效解析工具EasyExcel實(shí)踐的相關(guān)資料,需要的朋友可以參考下2022-04-04
使用Java Servlet生成動(dòng)態(tài)二維碼的實(shí)現(xiàn)步驟
在現(xiàn)代互聯(lián)網(wǎng)時(shí)代,二維碼廣泛應(yīng)用于各個(gè)領(lǐng)域,包括支付、認(rèn)證、信息傳遞等,在Web開發(fā)中,通過(guò)Java Servlet生成動(dòng)態(tài)二維碼是一個(gè)常見的需求,本文將介紹如何使用Java Servlet結(jié)合Google的ZXing庫(kù)生成動(dòng)態(tài)二維碼,需要的朋友可以參考下2023-11-11

