欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot自定義Starter的教程指南

 更新時間:2024年11月15日 10:23:06   作者:碼上一元  
SpringBoot的Starter自動配置機(jī)制極大地簡化了依賴管理和應(yīng)用配置,使得開發(fā)者可以以最少的配置快速啟動和運(yùn)行Spring應(yīng)用,有時,標(biāo)準(zhǔn)的Starter可能無法滿足特定需求,需要創(chuàng)建自定義Starter,所以本文給大家介紹了SpringBoot自定義Starter的教程指南

什么是SpringBoot Starter

SpringBoot Starter是一個特殊的依賴描述符,它包含了一系列的庫依賴,這些庫依賴定義了某個功能領(lǐng)域(如web應(yīng)用、數(shù)據(jù)庫訪問等)所需的所有類庫。SpringBoot通過spring-boot-autoconfigure模塊提供的自動配置機(jī)制來自動配置這些依賴。

Web應(yīng)用開發(fā)

  • spring-boot-starter-web:用于創(chuàng)建Web應(yīng)用和RESTful服務(wù),包含Tomcat和Spring MVC。
  • spring-boot-starter-webflux:用于構(gòu)建響應(yīng)式Web應(yīng)用,基于Reactor和Spring WebFlux。

數(shù)據(jù)庫訪問

  • spring-boot-starter-data-jpa:集成Spring Data JPA和Hibernate,用于關(guān)系數(shù)據(jù)庫的操作。
  • spring-boot-starter-data-mongodb:用于與MongoDB數(shù)據(jù)庫的集成。
  • spring-boot-starter-data-redis:用于與Redis鍵值存儲的集成。

庫依賴

把具備某些功能的坐標(biāo)打包到一起,簡化依賴導(dǎo)入。

比如導(dǎo)入了spring-boot-starter-web這個starter,那么和web相關(guān)的jar包都一起自動導(dǎo)入到項目中了。

在這里插入圖片描述

自動配置

無需手動配置xml,由starter進(jìn)行自動配置并管理bean,簡化開發(fā)過程。

mybatis-spring-boot-starter為例。

1)當(dāng)引入了mybatis-spring-boot-starter后,其引入的相關(guān)依賴如下:

在這里插入圖片描述

2)它導(dǎo)入了一個mybatis-spring-boot-autoconfigure 的jar包,其中有一個自動配置類MybatisAutoConfiguration 。

在這里插入圖片描述

3)打開看看,里面的關(guān)鍵代碼

在這里插入圖片描述

4)其中@Configuration@Bean注解,結(jié)合使用替代傳統(tǒng)的xml配置文件,把SqlSessionTemplateSqlSessionFactory注入到Spring容器。

注解@EnableConfigurationProperties,其作用是讓后面指定的配置屬性MybatisProperties類生效。

在這里插入圖片描述

把此類標(biāo)記為一個配置屬性類,prefix指定了前綴,其屬性就是配置的可選參數(shù)。

如配置包的別名:mybatis.type-aliases-package=com.yyh.entity。

5)那么這個MybatisAutoConfiguration類是怎么被加載的呢?

META-INF/spring.factories文件中,定義了MybatisAutoConfiguration。

在這里插入圖片描述

當(dāng) SpringBoot 應(yīng)用程序啟動時,會去加載該 jar 包下的META-INF/spring.factories文件。

詳情可以參考:SpringBoot自動裝配原理解析

命名規(guī)范

spring-boot-starter-xxx是SpringBoot官方定義的jar,如 spring-bbot-starter-web。
xxx-spring-boot-starter是非官網(wǎng)定義的,如第三方j(luò)ar包 mybatis-spring-boot-starter。

自定義 Starter

一般來說,需要我們自定義 starter 的原因如下:

  • 封裝功能:封裝一組特定的功能,使其可以輕松地在其他項目中復(fù)用。
  • 簡化配置:自動配置相關(guān)類庫,減少重復(fù)的配置工作。
  • 模塊化設(shè)計:保持應(yīng)用的模塊化,將特定功能隔離在單獨的模塊中。

比如,我們現(xiàn)在要新建一個 token-redis-spring-boot-starter。

1)新建項目,配置 pom。

在這里插入圖片描述

2)在包util下創(chuàng)建類TokenProperties,此類是一個配置屬性類。

在這里插入圖片描述

3)在包service下創(chuàng)建類TokenService,作為一個服務(wù)。

在這里插入圖片描述

4)在包config下創(chuàng)建類TokenAutoConfiguration,實現(xiàn)自動配置,把服務(wù)注入到Spring中。

在這里插入圖片描述

5)創(chuàng)建 spring.factories文件

#后面的路徑是TokenAutoConfiguration所在的路徑
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.example.demo.config.TokenAutoConfiguration

6)把項目打包發(fā)布到 maven 倉庫。

7)新建一個項目,并引入token-redis-spring-boot-starter。

在這里插入圖片描述

8)在配置文件中配置

在這里插入圖片描述

9)測試運(yùn)行

在這里插入圖片描述

輸出:127.0.0.1,0000,8888888

條件注解

在文中出現(xiàn)了好幾個類似于這樣的注解@ConditionalXXX。

比如:@ConditionalOnProperty、@ConditionalOnClass@ConditionalOnMissingBean

@Conditional 是在 SpringFramework 4.0 版本正式推出的,它可以讓 Bean的裝載基于一些指定的條件,換句話說,被標(biāo)注 @Conditional 注解的 Bean 要注冊到 IOC 容器時,必須全部滿足 @Conditional 上指定的所有條件才可以。

@ConditionalOnProperty

@ConditionalOnProperty 注解用于根據(jù)配置文件中的屬性值來決定是否加載某個自動配置類。

  • 屬性名稱:可以指定一個或多個屬性名稱,只有當(dāng)這些屬性被設(shè)置時,自動配置類才會被加載。
  • 屬性值:可以進(jìn)一步指定需要匹配的屬性值,只有當(dāng)屬性的值與指定值相匹配時,自動配置類才會被加載。
@Configuration
@EnableConfigurationProperties({TokenProperties.class})
@ConditionalOnProperty(
    value = {"token.enabled"},
    havingValue = "true"
)
public class TokenAutoConfiguration {
    public TokenAutoConfiguration() {
    }

    @Bean
    public TokenService tokenService() {
        return new TokenService();
    }
}

在這個例子中,只有當(dāng)配置文件中存在token.enabled屬性,TokenAutoConfiguration類才會被加載。

@ConditionalOnClass

@ConditionalOnClass 注解用于檢查類路徑上是否存在某個類,如果存在,則加載自動配置類。

  • classes:指定一個或多個類,如果這些類在類路徑上被找到,自動配置類就會被加載。
@Configuration
@ConditionalOnClass(name = {"com.mysql.cj.jdbc.Driver"})
public class MySqlAutoConfiguration {
    // ...
}

在這個例子中,只有當(dāng)類路徑上存在com.mysql.cj.jdbc.Driver類時,MySqlAutoConfiguration類才會被加載,這通常意味著MySQL JDBC驅(qū)動已經(jīng)添加到了項目的依賴中。

@ConditionalOnMissingBean

@ConditionalOnMissingBean 注解用于檢查Spring容器中是否已經(jīng)存在某個特定的Bean,如果不存在,則創(chuàng)建一個新的Bean。

  • value:指定需要檢查的Bean的類型。
  • search:指定搜索Bean的范圍,默認(rèn)為SearchStrategy.ALL,意味著在當(dāng)前上下文和父上下文中搜索。
@Configuration
public class MyServiceAutoConfiguration {

    @Bean
    @ConditionalOnMissingBean(MyService.class)
    public MyService myService() {
        return new DefaultMyService();
    }
}

在這個例子中,如果Spring容器中沒有MyService類型的Bean,那么myService方法將被調(diào)用以創(chuàng)建一個新的MyService Bean。

組合使用條件注解

這些條件注解可以單獨使用,也可以組合使用,以滿足更復(fù)雜的條件判斷需求。

例如,可以同時使用@ConditionalOnProperty@ConditionalOnClass來確保某個自動配置類只在滿足特定屬性值和類路徑上有特定類時才被加載。

@Configuration
@ConditionalOnProperty(name = "myapp.enabled")
@ConditionalOnClass(name = "com.mysql.cj.jdbc.Driver")
public class MySqlAutoConfiguration {
    // ...
}

在這個例子中,MySqlAutoConfiguration只有在配置文件中設(shè)置了myapp.enabled屬性,并且類路徑上存在com.mysql.cj.jdbc.Driver類時才會被加載。

以上就是SpringBoot自定義Starter的教程指南的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot自定義Starter的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java?關(guān)鍵字break和continue的使用說明

    Java?關(guān)鍵字break和continue的使用說明

    這篇文章主要介紹了Java?關(guān)鍵字break和continue的使用,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Java中的ReadWriteLock高效處理并發(fā)讀寫操作實例探究

    Java中的ReadWriteLock高效處理并發(fā)讀寫操作實例探究

    這篇文章主要為大家介紹了Java中的ReadWriteLock高效處理并發(fā)讀寫操作實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • java將一個目錄下的所有文件復(fù)制n次

    java將一個目錄下的所有文件復(fù)制n次

    這篇文章主要為大家詳細(xì)介紹了java將一個目錄下的所有文件復(fù)制n次,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • java常見面試題及答案匯總

    java常見面試題及答案匯總

    本文提供Java面試題集錦,涵蓋封裝、繼承、多態(tài)等核心概念,旨在幫助求職者全面復(fù)習(xí),提升面試表現(xiàn),從基礎(chǔ)知識到實際應(yīng)用,內(nèi)容豐富,適合各類求職者,需要的朋友可以參考下
    2024-09-09
  • SpringBoot 錯誤處理機(jī)制與自定義錯誤處理實現(xiàn)詳解

    SpringBoot 錯誤處理機(jī)制與自定義錯誤處理實現(xiàn)詳解

    這篇文章主要介紹了SpringBoot 錯誤處理機(jī)制與自定義錯誤處理實現(xiàn)詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • Jmeter基于JDBC請求實現(xiàn)MySQL數(shù)據(jù)庫測試

    Jmeter基于JDBC請求實現(xiàn)MySQL數(shù)據(jù)庫測試

    這篇文章主要介紹了Jmeter基于JDBC請求實現(xiàn)MySQL數(shù)據(jù)庫測試,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Java File類 mkdir 不能創(chuàng)建多層目錄的解決

    Java File類 mkdir 不能創(chuàng)建多層目錄的解決

    這篇文章主要介紹了Java File類 mkdir 不能創(chuàng)建多層目錄的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • spring boot實現(xiàn)自動輸出word文檔功能的實例代碼

    spring boot實現(xiàn)自動輸出word文檔功能的實例代碼

    這篇文章主要介紹了spring boot實現(xiàn)自動輸出word文檔功能的實例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Java 添加、刪除、替換、格式化Word中的文本的步驟詳解(基于Spire.Cloud.SDK for Java)

    Java 添加、刪除、替換、格式化Word中的文本的步驟詳解(基于Spire.Cloud.SDK for Java)

    這篇文章主要介紹了Java 添加、刪除、替換、格式化Word中的文本(基于Spire.Cloud.SDK for Java),本文分步驟通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • 解決IntellIJ IDEA提示內(nèi)存不足的圖文教程

    解決IntellIJ IDEA提示內(nèi)存不足的圖文教程

    現(xiàn)在越來越多的人投入了 IntellIJ Idea 的懷抱, 它給我們的日常開發(fā)帶來了諸多便利,但是我們在開發(fā)過程中,總是能碰到idea內(nèi)存不足問題,所以本文給大家介紹了解決IntellIJ IDEA提示內(nèi)存不足的圖文教程,需要的朋友可以參考下
    2025-03-03

最新評論