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

SpringBoot自定義一個(gè)Starter的完整代碼

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

一、什么是 Spring Boot Starter

Spring Boot Starter 的作用是:

封裝自動(dòng)配置
 +
封裝常用依賴
 +
提供開(kāi)箱即用的功能

很多常見(jiàn)組件其實(shí)都是 Starter,例如:

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

Starter 的目標(biāo)是:

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

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

核心就三步:

屬性類 → 自動(dòng)配置類 → 注冊(cè)文件

完整結(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 = "默認(rèn)名字";
    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;
    }
}

對(duì)應(yīng)的 application.yaml

my:
  starter:
    name: 小助
    timeout: 5000

Spring Boot 會(huì)自動(dòng)把 YAML 配置映射到 MyStarterProperties。

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

這是 Starter 對(duì)外提供的核心功能。

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 + ",超時(shí)時(shí)間 " + timeout + "ms";
    }
}

五、第3步:自動(dòng)配置類

自動(dòng)配置類負(fù)責(zé)在 Spring Boot 啟動(dòng)時(shí)創(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
 ↓
注冊(cè)到 Spring 容器

六、第4步:注冊(cè)自動(dòng)配置類

在目錄:

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

創(chuàng)建文件:

org.springframework.boot.autoconfigure.AutoConfiguration.imports

內(nèi)容:

com.example.mystarter.MyStarterAutoConfiguration

這一步的作用是:

告訴 Spring Boot
啟動(dòng)時(shí)加載你的自動(dòng)配置類

七、Starter 的核心依賴

Starter 項(xiàng)目只需要兩個(gè)核心依賴:

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

八、兩個(gè)依賴的作用

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

九、optional 的作用

<optional>true</optional>

含義:

只在編譯 Starter 時(shí)使用
不會(huì)傳遞給使用方

運(yùn)行時(shí)不需要該依賴。

十、Starter 依賴其他組件

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

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

當(dāng)用戶引入你的 Starter 時(shí):

Redis 依賴會(huì)自動(dòng)傳遞

用戶不需要再單獨(dú)引入。

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

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

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

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

總結(jié)

Spring Boot Starter 的核心就是:

@ConfigurationProperties
 +
AutoConfiguration
 +
AutoConfiguration.imports

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

Starter 項(xiàng)目完整 pom.xml 示例

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

完整示例:

<?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>
  <!-- 核心:自動(dòng)配置相關(guān)注解(@AutoConfiguration、@ConditionalOnXxx 等) -->
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-autoconfigure</artifactId>
   <version>${spring-boot.version}</version>
  </dependency>
  <!-- 核心:讓 @ConfigurationProperties 編譯時(shí)生成元數(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>

說(shuō)明:

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

configuration-processor 使用:

<optional>true</optional>

含義是:

只在編譯 Starter 時(shí)使用
不會(huì)傳遞給使用方項(xiàng)目

因此 Starter 運(yùn)行時(shí)并不依賴該組件。

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

相關(guān)文章

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

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

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

    mybatis?對(duì)于生成的sql語(yǔ)句?自動(dòng)加上單引號(hào)的情況詳解

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

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

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

    一文帶你掌握J(rèn)ava中Scanner類的使用

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

    Spring中的EventListenerMethodProcessor組件詳解

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

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

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

    MybatisPlus之時(shí)間處理問(wèn)題

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

    Ribbon負(fù)載均衡算法原理與使用介紹

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

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

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

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

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

最新評(píng)論

射洪县| 江门市| 泸定县| 共和县| 巴中市| 环江| 安徽省| 武汉市| 名山县| 淮安市| 淅川县| 东丰县| 夏邑县| 胶州市| 专栏| 桂平市| 旬邑县| 札达县| 吉林省| 云和县| 隆昌县| 五家渠市| 珲春市| 永修县| 康定县| 高平市| 永宁县| 鄂伦春自治旗| 安康市| 东阿县| 沙坪坝区| 南皮县| 清流县| 星子县| 建阳市| 旬阳县| 长阳| 云浮市| 隆子县| 阜南县| 姜堰市|