最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot自定義一個Starter的完整代碼

 更新時間:2026年03月27日 08:31:10   作者:hrui0706  
文章介紹了SpringBootStarter的開發(fā)流程及核心結(jié)構(gòu),主要包括屬性類綁定配置、提供服務(wù)類、自動配置類創(chuàng)建Bean、注冊自動配置類等步驟,同時,還詳細解釋了Starter的核心依賴、optional作用、與SpringBoot應(yīng)用的區(qū)別等內(nèi)容,需要的朋友可以參考下

一、什么是 Spring Boot Starter

Spring Boot Starter 的作用是:

封裝自動配置
 +
封裝常用依賴
 +
提供開箱即用的功能

很多常見組件其實都是 Starter,例如:

spring-boot-starter-web
spring-boot-starter-data-redis
spring-boot-starter-security

Starter 的目標是:

使用方只需要引入依賴
 +
在 application.yaml 寫配置
 +
就可以直接 @Autowired 使用

二、自定義 Starter 的核心結(jié)構(gòu)

核心就三步:

屬性類 → 自動配置類 → 注冊文件

完整結(jié)構(gòu)示例:

my-spring-boot-starter/
├── pom.xml
└── src/main/java/com/example/mystarter/
│   ├── MyService.java
│   ├── MyStarterProperties.java
│   └── MyStarterAutoConfiguration.java
└── src/main/resources/
    └── META-INF/spring/
        └── org.springframework.boot.autoconfigure.AutoConfiguration.imports

三、第1步:屬性類(綁定 application.yaml)

使用 @ConfigurationProperties 綁定配置。

@ConfigurationProperties(prefix = "my.starter")
public class MyStarterProperties {

    private String name = "默認名字";
    private int timeout = 3000;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getTimeout() {
        return timeout;
    }

    public void setTimeout(int timeout) {
        this.timeout = timeout;
    }
}

對應(yīng)的 application.yaml

my:
  starter:
    name: 小助
    timeout: 5000

Spring Boot 會自動把 YAML 配置映射到 MyStarterProperties。

四、第2步:提供服務(wù)類

這是 Starter 對外提供的核心功能。

public class MyService {

    private final String name;
    private final int timeout;

    public MyService(String name, int timeout) {
        this.name = name;
        this.timeout = timeout;
    }

    public String sayHello() {
        return "你好,我是 " + name + ",超時時間 " + timeout + "ms";
    }
}

五、第3步:自動配置類

自動配置類負責(zé)在 Spring Boot 啟動時創(chuàng)建 Bean。

@AutoConfiguration
@EnableConfigurationProperties(MyStarterProperties.class)
public class MyStarterAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean
    public MyService myService(MyStarterProperties properties) {
        return new MyService(
                properties.getName(),
                properties.getTimeout()
        );
    }
}

關(guān)鍵邏輯:

讀取配置
 ↓
創(chuàng)建 Bean
 ↓
注冊到 Spring 容器

六、第4步:注冊自動配置類

在目錄:

src/main/resources/META-INF/spring/

創(chuàng)建文件:

org.springframework.boot.autoconfigure.AutoConfiguration.imports

內(nèi)容:

com.example.mystarter.MyStarterAutoConfiguration

這一步的作用是:

告訴 Spring Boot
啟動時加載你的自動配置類

七、Starter 的核心依賴

Starter 項目只需要兩個核心依賴:

<dependencies>
 <!-- 自動配置核心注解 -->
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-autoconfigure</artifactId>
  <version>${spring-boot.version}</version>
 </dependency>
 <!-- 生成配置元數(shù)據(jù)(IDE yaml 自動提示) -->
 <dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-configuration-processor</artifactId>
  <version>${spring-boot.version}</version>
  <optional>true</optional>
 </dependency>
</dependencies>

八、兩個依賴的作用

依賴作用是否必須
spring-boot-autoconfigure提供 @AutoConfiguration@ConditionalOnMissingBean、@EnableConfigurationProperties 等注解必須
spring-boot-configuration-processor生成 spring-configuration-metadata.json,讓 IDE 提示 yaml 配置可選但建議

九、optional 的作用

<optional>true</optional>

含義:

只在編譯 Starter 時使用
不會傳遞給使用方

運行時不需要該依賴。

十、Starter 依賴其他組件

如果 Starter 內(nèi)部需要 Redis:

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

當用戶引入你的 Starter 時:

Redis 依賴會自動傳遞

用戶不需要再單獨引入。

十一、Starter 項目 vs Spring Boot 應(yīng)用

類型Starter 項目Spring Boot 應(yīng)用
父工程不需要需要
主類沒有 main()有 @SpringBootApplication
打包普通 jar可執(zhí)行 fat jar
是否可運行不能
本質(zhì)被依賴的庫獨立應(yīng)用

十二、Starter 開發(fā)流程

1 創(chuàng)建普通 Maven 項目
2 編寫屬性類(ConfigurationProperties)
3 編寫自動配置類(AutoConfiguration)
4 創(chuàng)建 AutoConfiguration.imports 注冊文件
5 mvn install
6 Spring Boot 項目引入依賴
7 直接 @Autowired 使用

總結(jié)

Spring Boot Starter 的核心就是:

@ConfigurationProperties
 +
AutoConfiguration
 +
AutoConfiguration.imports

完成這三步,就可以實現(xiàn)一個完整的 Spring Boot Starter。

Starter 項目完整 pom.xml 示例

Starter 項目本質(zhì)是一個普通 Maven 項目,只需要少量依賴即可。

完整示例:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.example</groupId>
 <artifactId>my-spring-boot-starter</artifactId>
 <version>1.0.0</version>
 <properties>
  <java.version>17</java.version>
  <spring-boot.version>3.5.7</spring-boot.version>
 </properties>
 <dependencies>
  <!-- 核心:自動配置相關(guān)注解(@AutoConfiguration、@ConditionalOnXxx 等) -->
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-autoconfigure</artifactId>
   <version>${spring-boot.version}</version>
  </dependency>
  <!-- 核心:讓 @ConfigurationProperties 編譯時生成元數(shù)據(jù)(IDE 提示 yaml 屬性) -->
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-configuration-processor</artifactId>
   <version>${spring-boot.version}</version>
   <optional>true</optional>
  </dependency>
 </dependencies>
</project>

說明:

spring-boot-autoconfigure
提供自動配置相關(guān)注解
spring-boot-configuration-processor
生成 spring-configuration-metadata.json
讓 IDE 在 application.yaml 中有自動提示

configuration-processor 使用:

<optional>true</optional>

含義是:

只在編譯 Starter 時使用
不會傳遞給使用方項目

因此 Starter 運行時并不依賴該組件。

以上就是SpringBoot自定義一個Starter的完整代碼的詳細內(nèi)容,更多關(guān)于SpringBoot自定義一個Starter的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Maven?自動化構(gòu)建的實現(xiàn)示例

    Maven?自動化構(gòu)建的實現(xiàn)示例

    本文主要介紹了Maven?自動化構(gòu)建的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • mybatis?對于生成的sql語句?自動加上單引號的情況詳解

    mybatis?對于生成的sql語句?自動加上單引號的情況詳解

    這篇文章主要介紹了mybatis?對于生成的sql語句?自動加上單引號的情況詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • springboot的application.yml配置port不生效的解決方案

    springboot的application.yml配置port不生效的解決方案

    這篇文章主要介紹了springboot的application.yml配置port不生效的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 一文帶你掌握Java中Scanner類的使用

    一文帶你掌握Java中Scanner類的使用

    Scanner類是java.util包中的一個類,常用于控制臺的輸入,當需要使用控制臺輸入時即可調(diào)用這個類。本文將通過一些簡單的例子為大家介紹一下Java中Scanner類的使用,需要的可以參考一下
    2023-04-04
  • Spring中的EventListenerMethodProcessor組件詳解

    Spring中的EventListenerMethodProcessor組件詳解

    這篇文章主要介紹了Spring中的EventListenerMethodProcessor組件詳解,EventListenerMethodProcessor 是 Spring 事件機制中非常重要的一個組件,它管理了一組EventListenerFactory組件,用來將應(yīng)用中每個使用@EventListener注解定義的事件監(jiān)聽,需要的朋友可以參考下
    2023-12-12
  • JavaWeb開發(fā)之【Tomcat 環(huán)境配置】MyEclipse+IDEA配置教程

    JavaWeb開發(fā)之【Tomcat 環(huán)境配置】MyEclipse+IDEA配置教程

    這篇文章主要介紹了JavaWeb開發(fā)之【Tomcat 環(huán)境配置】MyEclipse+IDEA配置教程,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • MybatisPlus之時間處理問題

    MybatisPlus之時間處理問題

    在數(shù)據(jù)庫設(shè)計時,阿里巴巴編碼規(guī)約建議使用gmt_create和gmt_modified命名時間字段,并設(shè)置為datetime類型,本文介紹了兩種自動填充時間字段的實現(xiàn)方式:SQL級別和代碼級別(使用MyBatis?Plus),SQL級別通過設(shè)置默認值和更新值為CURRENT_TIMESTAMP
    2024-09-09
  • Ribbon負載均衡算法原理與使用介紹

    Ribbon負載均衡算法原理與使用介紹

    在微服務(wù)中,對服務(wù)進行拆分之后,必然會帶來微服務(wù)之間的通信需求,而每個微服務(wù)為了保證高可用性,又會去部署集群,那么面對一個集群微服務(wù)進行通信的時候,如何進行負載均衡也是必然需要考慮的問題
    2022-09-09
  • SpringBoot實現(xiàn)嵌入式 Servlet容器

    SpringBoot實現(xiàn)嵌入式 Servlet容器

    傳統(tǒng)的Spring MVC工程部署時需要將WAR文件放置在servlet容器的文檔目錄內(nèi),而Spring Boot工程使用嵌入式servlet容器省去了這一步驟,本文就來設(shè)置一下相關(guān)配置,感興趣的可以了解一下
    2023-12-12
  • Windows下Java調(diào)用可執(zhí)行文件代碼實例

    Windows下Java調(diào)用可執(zhí)行文件代碼實例

    這篇文章主要介紹了Windows下Java調(diào)用可執(zhí)行文件代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12

最新評論

洪雅县| 雷州市| 城口县| 行唐县| 赫章县| 蚌埠市| 宁德市| 桂东县| 桐乡市| 大邑县| 本溪市| 白城市| 蒙自县| 湖北省| 台安县| 扬州市| 会泽县| 乌审旗| 凤城市| 涞源县| 晴隆县| 洞口县| 海安县| 壶关县| 通州市| 大厂| 堆龙德庆县| 靖宇县| 太原市| 普安县| 太和县| 化德县| 沈丘县| 磐安县| 山阳县| 临桂县| 吉水县| 南丹县| 星座| 丰城市| 阿坝县|