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

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

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

springboot starter簡(jiǎn)介

Starter 是什么

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

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

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

什么是SpringBoot starter機(jī)制

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

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

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

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

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

自定義Starter所需依賴(lài)

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

  • spring-boot-starter:該依賴(lài)是 Starter 的核心,包括自動(dòng)配置、日志和YAML的支持。我們所有自定義的 Starter 都應(yīng)該直接或間接的引入該依賴(lài)。
  • spring-boot-configuration-processor:包含一個(gè) Java 注解處理器,當(dāng)使用@ConfigurationProperties注解配置自己的元數(shù)據(jù)時(shí),需要引入此依賴(lài)。其作用是生產(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>

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

相關(guān)注解含義

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

自定義Starter示例

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

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

2、引入依賴(lài)

<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ù)類(lèi)

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

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

/**
 * @ConfigurationProperties:將該類(lèi)中所有的屬性和配置文件中的相關(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)類(lèi)

/**
 * 這里是寫(xiě) 這個(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è)配置類(lèi)

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

// 該類(lèi)為一個(gè)配置類(lèi)
@Configuration(proxyBeanMethods = false)
// @ConditionalOnClass是Spring Boot中的一個(gè)條件注解,它用于指定某個(gè)類(lèi)存在時(shí),才會(huì)創(chuàng)建并初始化被注解的Bean。
// 放在這里就是容器中有DemoService組件  才會(huì)創(chuàng)建DemoAutoConfigure
@ConditionalOnClass(value = {DemoService.class})
// 導(dǎo)入我們自定義的配置類(lèi),供當(dāng)前類(lèi)使用
@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è)組件無(wú)論被取出多少次都是同一個(gè)bean實(shí)例,即單實(shí)例對(duì)象,在該模式下SpringBoot每次啟動(dòng)都會(huì)判斷檢查容器中是否存在該組件
  • Lite(proxyBeanMethods = false) :proxyBeanMethods參數(shù)設(shè)置為false時(shí)即為:Lite 輕量級(jí)模式。該模式下注入容器中的同一個(gè)組件無(wú)論被取出多少次都是不同的bean實(shí)例,即多實(shí)例對(duì)象,在該模式下SpringBoot每次啟動(dòng)會(huì)跳過(guò)檢查容器中是否存在該組件
  • 什么時(shí)候用Full全模式,什么時(shí)候用Lite輕量級(jí)模式?當(dāng)在你的同一個(gè)Configuration配置類(lèi)中,注入到容器中的bean實(shí)例之間有依賴(lài)關(guān)系時(shí),建議使用Full全模式當(dāng)在你的同一個(gè)Configuration配置類(lèi)中,注入到容器中的bean實(shí)例之間沒(méi)有依賴(lài)關(guān)系時(shí),建議使用Lite輕量級(jí)模式,以提高springboot的啟動(dòng)速度和性能

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

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

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

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

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

7、測(cè)試

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

mvn clean install -Dmaven.test.skip=true

或者通過(guò)IDEA 的install打包

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

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

相關(guān)文章

  • SpringBoot整合Hutool實(shí)現(xiàn)文件上傳的使用示例

    SpringBoot整合Hutool實(shí)現(xiàn)文件上傳的使用示例

    文件上傳在項(xiàng)目經(jīng)常會(huì)用到,本文主要介紹了SpringBoot整合Hutool實(shí)現(xiàn)文件上傳的使用示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Java進(jìn)階學(xué)習(xí):網(wǎng)絡(luò)服務(wù)器編程

    Java進(jìn)階學(xué)習(xí):網(wǎng)絡(luò)服務(wù)器編程

    Java進(jìn)階學(xué)習(xí):網(wǎng)絡(luò)服務(wù)器編程...
    2006-12-12
  • java中struts2實(shí)現(xiàn)文件上傳下載功能

    java中struts2實(shí)現(xiàn)文件上傳下載功能

    這篇文章主要介紹了java中struts2實(shí)現(xiàn)文件上傳下載功能的方法,以實(shí)例形式分析了struts2文件上傳下載功能的實(shí)現(xiàn)技巧與相關(guān)問(wèn)題,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2016-05-05
  • java實(shí)現(xiàn)文件拷貝的七種方式

    java實(shí)現(xiàn)文件拷貝的七種方式

    這篇文章主要介紹了java實(shí)現(xiàn)文件拷貝的七種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • SpringBoot文件上傳的幾種常見(jiàn)方式(單文件上傳、多文件上傳)

    SpringBoot文件上傳的幾種常見(jiàn)方式(單文件上傳、多文件上傳)

    本文詳解SpringBoot文件上傳實(shí)現(xiàn),涵蓋單文件、多文件上傳及大小類(lèi)型限制方法,強(qiáng)調(diào)隱私保護(hù)與非法文件防范的社會(huì)責(zé)任,適配不同場(chǎng)景需求,提供技術(shù)解決方案與合規(guī)實(shí)踐指導(dǎo),感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • 如何在Java SpringBoot項(xiàng)目中配置動(dòng)態(tài)數(shù)據(jù)源你知道嗎

    如何在Java SpringBoot項(xiàng)目中配置動(dòng)態(tài)數(shù)據(jù)源你知道嗎

    這篇文章主要介紹了SpringBoot如何在運(yùn)行時(shí)動(dòng)態(tài)添加數(shù)據(jù)源,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Java?CAS與JUC組件詳解

    Java?CAS與JUC組件詳解

    CAS是一種基于樂(lè)觀(guān)鎖的無(wú)鎖并發(fā)控制技術(shù),其核心邏輯可以概括為:“我認(rèn)為當(dāng)前值應(yīng)該是A,如果是,則更新為B;否則放棄或重試”,整個(gè)過(guò)程由硬件保證原子性,無(wú)需傳統(tǒng)鎖機(jī)制,本文給大家介紹Java?CAS與JUC組件的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2025-04-04
  • eclipse實(shí)現(xiàn)DSA數(shù)字簽名

    eclipse實(shí)現(xiàn)DSA數(shù)字簽名

    這篇文章主要為大家詳細(xì)介紹了eclipse實(shí)現(xiàn)DSA數(shù)字簽名算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • SpringBoot中使用Session共享實(shí)現(xiàn)分布式部署的示例代碼

    SpringBoot中使用Session共享實(shí)現(xiàn)分布式部署的示例代碼

    這篇文章主要介紹了SpringBoot中使用Session共享實(shí)現(xiàn)分布式部署的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Spring中@Transactional注解關(guān)鍵屬性和用法小結(jié)

    Spring中@Transactional注解關(guān)鍵屬性和用法小結(jié)

    在Spring框架中,@Transactional 是一個(gè)注解,用于聲明事務(wù)性的方法,它提供了一種聲明式的事務(wù)管理方式,避免了在代碼中直接編寫(xiě)事務(wù)管理相關(guān)的代碼,本文給大家介紹@Transactional 注解的一些關(guān)鍵屬性和用法,感興趣的朋友一起看看吧
    2023-12-12

最新評(píng)論

通江县| 南木林县| 黔南| 汝州市| 姜堰市| 拉孜县| 八宿县| 宁津县| 河津市| 宾川县| 天气| 新蔡县| 穆棱市| 宁夏| 淮阳县| 洛阳市| 称多县| 夏邑县| 宁夏| 即墨市| 策勒县| 阜宁县| 米易县| 宜兰县| 宝山区| 诏安县| 楚雄市| 平凉市| 辉南县| 襄汾县| 冀州市| 江源县| 大城县| 洛南县| 郓城县| 岳阳县| 龙岩市| 万荣县| 文昌市| 平湖市| 九寨沟县|