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

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)一的配置,避免了復制、粘貼代碼和依賴帶來的麻煩。

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

什么是SpringBoot starter機制

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

啟動器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 或其他組件產生沖突,例如:server、spring

為什么要自定義starter

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

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

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

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

自定義Starter所需依賴

在POM中引入兩個依賴:

  • spring-boot-starter:該依賴是 Starter 的核心,包括自動配置、日志和YAML的支持。我們所有自定義的 Starter 都應該直接或間接的引入該依賴。
  • spring-boot-configuration-processor:包含一個 Java 注解處理器,當使用@ConfigurationProperties注解配置自己的元數(shù)據時,需要引入此依賴。其作用是生產配置元數(shù)據,能夠在配置文件中給與提示,比如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>都一樣,都是需要顯示調用才能引用該依賴的jar包

相關注解含義

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

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

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

/**
 * @ConfigurationProperties:將該類中所有的屬性和配置文件中的相關配置進行綁定。
 */
@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ā)送短信,那么這里獲取到手機號參數(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ù)據類一個包下

// 該類為一個配置類
@Configuration(proxyBeanMethods = false)
// @ConditionalOnClass是Spring Boot中的一個條件注解,它用于指定某個類存在時,才會創(chuàng)建并初始化被注解的Bean。
// 放在這里就是容器中有DemoService組件  才會創(chuàng)建DemoAutoConfigure
@ConditionalOnClass(value = {DemoService.class})
// 導入我們自定義的配置類,供當前類使用
@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ù)設置為true時即為:Full 全模式。 該模式下注入容器中的同一個組件無論被取出多少次都是同一個bean實例,即單實例對象,在該模式下SpringBoot每次啟動都會判斷檢查容器中是否存在該組件
  • Lite(proxyBeanMethods = false) :proxyBeanMethods參數(shù)設置為false時即為:Lite 輕量級模式。該模式下注入容器中的同一個組件無論被取出多少次都是不同的bean實例,即多實例對象,在該模式下SpringBoot每次啟動會跳過檢查容器中是否存在該組件
  • 什么時候用Full全模式,什么時候用Lite輕量級模式?當在你的同一個Configuration配置類中,注入到容器中的bean實例之間有依賴關系時,建議使用Full全模式當在你的同一個Configuration配置類中,注入到容器中的bean實例之間沒有依賴關系時,建議使用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會自動加載該文件并根據條件裝配

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

7、測試

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

mvn clean install -Dmaven.test.skip=true

或者通過IDEA 的install打包

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

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

相關文章

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

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

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

    Java進階學習:網絡服務器編程

    Java進階學習:網絡服務器編程...
    2006-12-12
  • java中struts2實現(xiàn)文件上傳下載功能

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

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

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

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

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

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

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

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

    Java?CAS與JUC組件詳解

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

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

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

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

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

    Spring中@Transactional注解關鍵屬性和用法小結

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

最新評論

睢宁县| 彰化市| 江永县| 突泉县| 周宁县| 监利县| 遵化市| 高州市| 利辛县| 嘉鱼县| 沁源县| 东乡族自治县| 泰和县| 黄浦区| 塘沽区| 封丘县| 泰来县| 南安市| 前郭尔| 怀柔区| 钟祥市| 筠连县| 泊头市| 安福县| 涟水县| 宁德市| 抚远县| 将乐县| 四子王旗| 慈利县| 舞钢市| 井研县| 确山县| 江西省| 安平县| 通渭县| 彭山县| 驻马店市| 资源县| 临沭县| 公主岭市|