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

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

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

springboot starter簡(jiǎn)介

Starter 是什么

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

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

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

什么是SpringBoot starter機(jī)制

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

啟動(dòng)器starter命名

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

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

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

為什么要自定義starter

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

什么時(shí)候需要?jiǎng)?chuàng)建自定義starter

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

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

自定義Starter所需依賴

在POM中引入兩個(gè)依賴:

  • spring-boot-starter:該依賴是 Starter 的核心,包括自動(dòng)配置、日志和YAML的支持。我們所有自定義的 Starter 都應(yīng)該直接或間接的引入該依賴。
  • spring-boot-configuration-processor:包含一個(gè) Java 注解處理器,當(dāng)使用@ConfigurationProperties注解配置自己的元數(shù)據(jù)時(shí),需要引入此依賴。其作用是生產(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>,在這種情況下,在子模塊中會(huì)直接下載該依賴jar包,對(duì)于<optional>true</optional>來說,父模塊中是否加上<dependencyManagement>都一樣,都是需要顯示調(diào)用才能引用該依賴的jar包

相關(guān)注解含義

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

自定義Starter示例

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

創(chuàng)建一個(gè) 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、定義一個(gè)配置元數(shù)據(jù)類

自定義一個(gè)配置元數(shù)據(jù)類DemoProperties,用于映射YAML中的配置,使用@ConfigurationProperties注解需要指定配置項(xiàng)的前綴,此處的前綴為mysyu。yml文件中提示時(shí)可以使用: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àng)目具體實(shí)現(xiàn)類

/**
 * 這里是寫 這個(gè)項(xiàng)目獲取到了配置之后具體要做什么
 * 這個(gè)例子只是簡(jiǎn)單演示starter基本使用 只是輸出
 * 比如配置的是發(fā)送短信,那么這里獲取到手機(jī)號(hào)參數(shù)后 可以實(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)建一個(gè)配置類

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

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

@Configuration(proxyBeanMethods = false)

首先引出兩個(gè)概念:Full 全模式,Lite 輕量級(jí)模式

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

6、定義自動(dòng)配置的候選

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

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

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

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

7、測(cè)試

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

mvn clean install -Dmaven.test.skip=true

或者通過IDEA 的install打包

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

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

相關(guān)文章

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

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

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

    Springboot初始化項(xiàng)目并完成登入注冊(cè)的全過程

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

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

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

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

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

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

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

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

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

    通過ibatis解決sql注入問題

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

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

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

    深入理解Spring Cloud Zuul過濾器

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

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

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

最新評(píng)論