亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

springboot starter介紹與自定義starter示例詳解

 更新時間:2025年05月07日 16:19:28   作者:Vic2334  
Spring Boot 的 Starter 是一組比較方便的依賴描述符,可以通過 Maven 將其打成jar包,并在你的項目中直接引用,這篇文章主要介紹了springboot starter介紹與自定義starter示例,需要的朋友可以參考下

springboot starter簡介

Starter 是什么

Spring Boot 的 Starter 是一組比較方便的依賴描述符,可以通過 Maven 將其打成jar包,并在你的項目中直接引用。

通過 Starter 你可以獲取該功能的所有依賴,以及統(tǒng)一的配置,避免了復(fù)制、粘貼代碼和依賴帶來的麻煩。

Starter 主要使用了自動配置,所以它下面的所有組件會被 Spring Boot 通過META-INF/spring.factories文件注入IOC容器中。

什么是SpringBoot starter機(jī)制

SpringBoot中的starter是一種非常重要的機(jī)制(自動化配置),能夠拋棄以前繁雜的配置,將其統(tǒng)一集成進(jìn)starter,應(yīng)用者只需要在maven中引入starter依賴,SpringBoot就能自動掃描到要加載的信息并啟動相應(yīng)的默認(rèn)配置。starter讓我們擺脫了各種依賴庫的處理,需要配置各種信息的困擾。SpringBoot會自動通過classpath路徑下的類發(fā)現(xiàn)需要的Bean,并注冊進(jìn)IOC容器。SpringBoot提供了針對日常企業(yè)應(yīng)用研發(fā)各種場景的spring-boot-starter依賴模塊。所有這些依賴模塊都遵循著約定成俗的默認(rèn)配置,并允許我們調(diào)整這些配置,即遵循“約定大于配置”的理念。

啟動器starter命名

#官方
spring-boot-starter-jdbc
spring-boot-starter-web
spring-boot-starter-freemarker
#第三方
sms-spring-boot-starter
myLog-spring-boot-starter

配置項的命名規(guī)范

如果自定義的 Starter 包含了配置項,請為它使用唯一的命名空間,不要與 Spring Boot 或其他組件產(chǎn)生沖突,例如:server、spring

為什么要自定義starter

在我們的日常開發(fā)工作中,經(jīng)常會有一些獨立于業(yè)務(wù)之外的配置模塊,我們經(jīng)常將其放到一個特定的包下,
然后如果另一個工程需要復(fù)用這塊功能的時候,需要將代碼硬拷貝到另一個工程,重新集成一遍,麻煩至極。
如果我們將這些可獨立于業(yè)務(wù)代碼之外的功能配置模塊封裝成一個個starter,復(fù)用的時候只需要將其在pom中引用依賴即可,
SpringBoot為我們完成自動裝配,簡直不要太爽

什么時候需要創(chuàng)建自定義starter

在我們的日常開發(fā)工作中,可能會需要開發(fā)一個通用模塊,以供其它工程復(fù)用。SpringBoot就為我們提供這樣的功能機(jī)制,
我們可以把我們的通用模塊封裝成一個個starter,這樣其它工程復(fù)用的時候只需要在pom中引用依賴即可,
由SpringBoot為我們完成自動裝配。

常見場景:
1.通用模塊-短信發(fā)送模塊
2.基于AOP技術(shù)實現(xiàn)日志切面
3.微服務(wù)項目的數(shù)據(jù)庫連接池配置
4.微服務(wù)項目的每個模塊都要訪問redis數(shù)據(jù)庫,每個模塊都要配置redisTemplate
也可以通過starter解決

自定義Starter所需依賴

在POM中引入兩個依賴:

  • spring-boot-starter:該依賴是 Starter 的核心,包括自動配置、日志和YAML的支持。我們所有自定義的 Starter 都應(yīng)該直接或間接的引入該依賴。
  • spring-boot-configuration-processor:包含一個 Java 注解處理器,當(dāng)使用@ConfigurationProperties注解配置自己的元數(shù)據(jù)時,需要引入此依賴。其作用是生產(chǎn)配置元數(shù)據(jù),能夠在配置文件中給與提示,比如server.port
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

其中<optional>true</optional>

父模塊的依賴中添加<optional>true</optional>,在這種情況下,在子模塊中會直接下載該依賴jar包,對于<optional>true</optional>來說,父模塊中是否加上<dependencyManagement>都一樣,都是需要顯示調(diào)用才能引用該依賴的jar包

相關(guān)注解含義

@Configuration //指定這個類是一個配置類
@ConditionalOnXXX //在指定條件成立的情況下自動配置類生效
@AutoConfigureOrder //指定自動配置類的順序
@AutoConfigureBefore //在特定自動裝配Class之前
@AutoConfigureAfter //在特定自動裝配Class之后
@Bean //給容器中添加組件
@ConfigurationPropertie //結(jié)合相關(guān)xxxProperties類來綁定相關(guān)的配置
@EnableConfigurationProperties //讓xxxProperties生效加入到容器中
自動配置類要能加載 將需要啟動就加載的自動配置類,配置在META‐INF/spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
@Conditional:按照一定的條件進(jìn)行判斷,滿足條件給容器注冊bean
@ConditionalOnMissingBean:給定的在bean不存在時,則實例化當(dāng)前Bean
@ConditionalOnProperty:配置文件中滿足定義的屬性則創(chuàng)建bean,否則不創(chuàng)建
@ConditionalOnBean:給定的在bean存在時,則實例化當(dāng)前Bean
@ConditionalOnClass: 當(dāng)給定的類名在類路徑上存在,則實例化當(dāng)前Bean
@ConditionalOnMissingClass :當(dāng)給定的類名在類路徑上不存在,則實例化當(dāng)前Bean

自定義Starter示例

1、創(chuàng)建自定義的 Starter 工程

創(chuàng)建一個 Spring Boot 工程,將其命名為demo-spring-boot-starter

2、引入依賴

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.14</version>
</parent>
<dependencies>
     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter</artifactId>
         <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

3、定義一個配置元數(shù)據(jù)類

自定義一個配置元數(shù)據(jù)類DemoProperties,用于映射YAML中的配置,使用@ConfigurationProperties注解需要指定配置項的前綴,此處的前綴為mysyu。yml文件中提示時可以使用:mysyu.name。

包名可以命名為cn.xx.autoconfigure

/**
 * @ConfigurationProperties:將該類中所有的屬性和配置文件中的相關(guān)配置進(jìn)行綁定。
 */
@Component
@ConfigurationProperties(prefix = "mystu")
@Getter
@Setter
public class DemoProperties {
    /**
     * 屬性
     */
    private String name;
    private String sex;
    private String age;
}

4、創(chuàng)建本項目具體實現(xiàn)類

/**
 * 這里是寫 這個項目獲取到了配置之后具體要做什么
 * 這個例子只是簡單演示starter基本使用 只是輸出
 * 比如配置的是發(fā)送短信,那么這里獲取到手機(jī)號參數(shù)后 可以實現(xiàn)發(fā)送功能代碼
 */
public class DemoService {
    private DemoProperties demoProperties;
    public DemoService(DemoProperties demoProperties){
        this.demoProperties = demoProperties;
    }
    public void print(){
        System.out.println("獲取到的姓名:"+demoProperties.getName());
        System.out.println("獲取到的性別:"+demoProperties.getSex());
        System.out.println("獲取到的年齡:"+demoProperties.getAge());
    }
}

5、創(chuàng)建一個配置類

DemoAutoConfiguration,可以放在和元數(shù)據(jù)類一個包下

// 該類為一個配置類
@Configuration(proxyBeanMethods = false)
// @ConditionalOnClass是Spring Boot中的一個條件注解,它用于指定某個類存在時,才會創(chuàng)建并初始化被注解的Bean。
// 放在這里就是容器中有DemoService組件  才會創(chuàng)建DemoAutoConfigure
@ConditionalOnClass(value = {DemoService.class})
// 導(dǎo)入我們自定義的配置類,供當(dāng)前類使用
@EnableConfigurationProperties(value = DemoProperties.class)
public class DemoAutoConfigure {
    @Bean
    // 容器中不存在這個對象,才會實例化一個Bean
    @ConditionalOnMissingBean(DemoService.class)
    public DemoService helloService(DemoProperties demo) {
        //把獲取的信息注入
        DemoService demoService = new DemoService(demo);
        return demoService;
    }
}

@Configuration(proxyBeanMethods = false)

首先引出兩個概念:Full 全模式,Lite 輕量級模式

  • Full(proxyBeanMethods = true) :proxyBeanMethods參數(shù)設(shè)置為true時即為:Full 全模式。 該模式下注入容器中的同一個組件無論被取出多少次都是同一個bean實例,即單實例對象,在該模式下SpringBoot每次啟動都會判斷檢查容器中是否存在該組件
  • Lite(proxyBeanMethods = false) :proxyBeanMethods參數(shù)設(shè)置為false時即為:Lite 輕量級模式。該模式下注入容器中的同一個組件無論被取出多少次都是不同的bean實例,即多實例對象,在該模式下SpringBoot每次啟動會跳過檢查容器中是否存在該組件
  • 什么時候用Full全模式,什么時候用Lite輕量級模式?當(dāng)在你的同一個Configuration配置類中,注入到容器中的bean實例之間有依賴關(guān)系時,建議使用Full全模式當(dāng)在你的同一個Configuration配置類中,注入到容器中的bean實例之間沒有依賴關(guān)系時,建議使用Lite輕量級模式,以提高springboot的啟動速度和性能

6、定義自動配置的候選

resources資源目錄中增加文件META-INF/spring.factories,并將自定義的配置類DemoAutoConfiguration加入到自動配置類列表中,如下代碼:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.xx.autoconfigure.DemoAutoConfigure

把自動配置類DemoAutoConfiguration配置到org.springframework.boot.autoconfigure.EnableAutoConfiguration的key下,springboot會自動加載該文件并根據(jù)條件裝配

Spring Boot 會檢查所有發(fā)布的jar中是否包含META-INF/spring.factories文件,并將該文件中目標(biāo)類注入IOC容器中,自動配置類就是使用這種方式加載的。

7、測試

以上步驟都完成后 使用maven命令打包

mvn clean install -Dmaven.test.skip=true

或者通過IDEA 的install打包

最后在需要導(dǎo)入該項目的地方引入這個項目依賴并測試

到此這篇關(guān)于springboot starter介紹與自定義starter示例的文章就介紹到這了,更多相關(guān)springboot 自定義starter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot+WebSocket實現(xiàn)IM及時通訊的代碼示例

    SpringBoot+WebSocket實現(xiàn)IM及時通訊的代碼示例

    項目中碰到需要及時通訊的場景,使用springboot集成websocket,即可實現(xiàn)簡單的及時通訊,本文介紹springboot如何集成websocket、IM及時通訊需要哪些模塊、開發(fā)和部署過程中遇到的問題、以及實現(xiàn)小型IM及時通訊的代碼,需要的朋友可以參考下
    2023-10-10
  • Springboot初始化項目并完成登入注冊的全過程

    Springboot初始化項目并完成登入注冊的全過程

    工作之余,想要學(xué)習(xí)一下SpringBoot,通過網(wǎng)絡(luò)大量教程最終成功運行SpringBoot項目,下面這篇文章主要給大家介紹了關(guān)于Springboot初始化項目并完成登入注冊的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • Java并發(fā)編程中的CyclicBarrier線程屏障詳解

    Java并發(fā)編程中的CyclicBarrier線程屏障詳解

    這篇文章主要介紹了Java并發(fā)編程中的CyclicBarrier線程屏障詳解,
    2023-12-12
  • 詳解java基礎(chǔ)--提示對話框的使用

    詳解java基礎(chǔ)--提示對話框的使用

    這篇文章主要介紹了java基礎(chǔ)--提示對話框的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • java中 String和StringBuffer的區(qū)別實例詳解

    java中 String和StringBuffer的區(qū)別實例詳解

    這篇文章主要介紹了java中 String和StringBuffer的區(qū)別實例詳解的相關(guān)資料,一個小的例子,來測試String和StringBuffer在時間和空間使用上的差別,需要的朋友可以參考下
    2017-04-04
  • SpringBoot ThreadLocal實現(xiàn)公共字段自動填充案例講解

    SpringBoot ThreadLocal實現(xiàn)公共字段自動填充案例講解

    每一次在Controller層中封裝改動數(shù)據(jù)的方法時都要重新設(shè)置一些共性字段,顯得十分冗余。為了解決此問題也是在項目中第一次利用到線程,總的來說還是讓我眼前一亮,也開闊了視野,對以后的開發(fā)具有深遠(yuǎn)的意義
    2022-10-10
  • 通過ibatis解決sql注入問題

    通過ibatis解決sql注入問題

    這篇文章主要介紹了通過ibatis解決sql注入問題,需要的朋友可以參考下
    2017-09-09
  • java固定大小隊列的幾種實現(xiàn)方式詳解

    java固定大小隊列的幾種實現(xiàn)方式詳解

    隊列的特點是節(jié)點的排隊次序和出隊次序按入隊時間先后確定,即先入隊者先出隊,后入隊者后出隊,這篇文章主要給大家介紹了關(guān)于java固定大小隊列的幾種實現(xiàn)方式,需要的朋友可以參考下
    2021-07-07
  • 深入理解Spring Cloud Zuul過濾器

    深入理解Spring Cloud Zuul過濾器

    這篇文章主要給大家介紹了關(guān)于Spring Cloud Zuul過濾器的相關(guān)資料,通過閱讀本文您將了解:Zuul過濾器類型與請求生命周期、如何編寫Zuul過濾器、如何禁用Zuul過濾器和Spring Cloud為Zuul編寫的過濾器及其功能,需要的朋友可以參考下。
    2017-02-02
  • Spring項目中使用Junit單元測試并配置數(shù)據(jù)源的操作

    Spring項目中使用Junit單元測試并配置數(shù)據(jù)源的操作

    這篇文章主要介紹了Spring項目中使用Junit單元測試并配置數(shù)據(jù)源的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論