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

SpringBoot如何自定義starter

 更新時間:2022年01月18日 09:39:13   作者:碼農(nóng)洞見  
這篇文章主要介紹了SpringBoot如何自定義starter,Springboot的出現(xiàn)極大的簡化了開發(fā)人員的配置,而這之中的一大利器便是springboot的starter,starter是springboot的核心組成部分,下面來看看集體引用過程吧

1. 什么是starter

Springboot的出現(xiàn)極大的簡化了開發(fā)人員的配置,而這之中的一大利器便是springboot的starter,starter是springboot的核心組成部分,為什么說引入如下依賴就滿足了日常web開發(fā)?

<dependency>
? <groupId>org.springframework.boot</groupId>
? <artifactId>spring-boot-starter-web</artifactId>
</dependency>

而不使用springboot時,需要引入spring-web、spring-webmvcspring-aop等等。實際上那些必要的依賴在spring-boot-starter-web中已經(jīng)被引入了,引入這個組名就引入了所有的依賴。

2. 自動配置原理

springboot在啟動的時候會加載主配置類,開啟了@EnableAutoConfiguration

@EnableAutoConfiguration的作用:

利用AutoConfigurationImportSelector給容器導(dǎo)入一些組件。
查看selectImports方法的內(nèi)容,返回一個AutoConfigurationEntry
可以看到SpringFactoriesLoader.loadFactoryNames,繼續(xù)看又調(diào)用了loadSpringFactories方法,獲取META-INF/spring.factories資源文件。這個spring.factories文件也是一組一組的key=value的形式,其中一個key是EnableAutoConfiguration類的全類名,而它的value是一個xxxxAutoConfiguration的類名的列表,這些類名以逗號分隔,最后都加入到容器中,用來做自動配置,每一個自動配置類都可以進行自動配置功能使用HttpEncodingAutoConfiguration來解釋自動裝配原理。根據(jù)當(dāng)前不同的條件判斷,決定這個配置類是否生效!

2.1 自動配置生效

每一個XxxxAutoConfiguration自動配置類都是在某些條件之下才會生效的,這些條件的限制在Spring Boot中以注解的形式體現(xiàn),

常見的條件注解有如下幾項:

  • @Conditional擴展注解 作用
  • @ConditionalOnJava 系統(tǒng)的java版本是否符合要求
  • @ConditionalOnBean 容器中存在指定Bean
  • @ConditionalOnMissingBean 容器中不存在指定Bean
  • @ConditionalOnExpression 滿足SpEL表達式
  • @ConditionalOnClass 系統(tǒng)中有指定的類
  • @ConditionalOnMissingClass 系統(tǒng)中沒有指定的類
  • @ConditionalOnSingleCandidate 容器中只有一個指定的Bean,或者是首選Bean
  • @ConditionalOnProperty 系統(tǒng)中指定的屬性是否有指定的值
  • @ConditionalOnResource 類路徑下是否存在指定資源文件
  • @ConditionOnWebApplication 當(dāng)前是web環(huán)境
  • @ConditionalOnNotWebApplication 當(dāng)前不是web環(huán)境

自動配置原理總結(jié)如下:

  •     1、Spring Boot啟動的時候會通過@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自動配置類進行加載
  •     2、這些自動配置類都是以AutoConfiguration結(jié)尾來命名的,它實際上就是一個JavaConfig形式的Spring容器配置類
  •     3、自動配置類通過以Properties結(jié)尾命名的類中取得在全局配置文件中配置的屬性如:server.port,而XxxxProperties類是通過@ConfigurationProperties注解與全局配置文件中對應(yīng)的屬性進行綁定的。

3. 自定義starter

spring-boot有兩種starter:

一種是內(nèi)部已經(jīng)支持的,其通過@ConditionalOnClass來實決定是否例化(ConditionalOnClass是指當(dāng)在classpath發(fā)現(xiàn)需要的依賴的類時實例化),想要啟動這個服務(wù),只要要配置上對應(yīng)的starter,這個starter就能把所需要的jar給關(guān)聯(lián)上。
一種是第三方的,比如mybatis等。原理是一樣的,就是在你已經(jīng)實現(xiàn)的服務(wù)代碼之上封裝一層配置代碼就行。
基于這個機制,我們自己也可以實現(xiàn)一個。自定義starter,我們要做的事情是兩個:確定依賴和編寫自動配置。我們重點要做的就是編寫自動配置,我們之前寫過一些自動配置,主要是注解配置的使用,主要的注解有:

  • @Configuration :指定這個類是一個配置類
  • @ConditionalOnXXX :在指定條件成立的情況下自動配置類生效
  • @AutoConfigureAfter:指定自動配置類的順序
  • @Bean:給容器中添加組件
  • @ConfigurationPropertie:結(jié)合相關(guān)xxxProperties類來綁定相關(guān)的配置
  • @EnableConfigurationProperties:讓xxxProperties生效加入到容器中

3.1 命名規(guī)范

SpringBoot提供的starter以spring-boot-starter-xxx的方式命名的。官方建議自定義的starter使用xxx-spring-boot-starter命名規(guī)則。以區(qū)分SpringBoot生態(tài)提供的starter。

官方命名空間:

  • 前綴:“spring-boot-starter-”
  • 模式:spring-boot-starter-模塊名
  • 舉例:spring-boot-starter-web、spring-boot-starter-jdbc

自定義命名空間:

  • 后綴:“-spring-boot-starter”
  • 模式:模塊-spring-boot-starter
  • 舉例:druid-spring-boot-starter、mybatis-spring-boot-starter

4.總結(jié)

Starter可以理解為一個可拔插式的插件,提供一系列便利的依賴描述符,您可以獲得所需的所有Spring和相關(guān)技術(shù)的一站式服務(wù)。應(yīng)用程序只需要在maven中引入starter依賴,SpringBoot就能自動掃描到要加載的信息并啟動相應(yīng)的默認配置。

4.1為什么要自定義starter?

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

4.2 自定義starter的案例

以下案例由筆者工作中遇到的部分場景

動態(tài)數(shù)據(jù)源。 — fs-dynamic-starter
登錄模塊(權(quán)限)。— fs-auth-client-starter
基于AOP技術(shù)實現(xiàn)日志切面。—fs-common-starter
案例地址:https://gitee.com/Manoninsight/fullset/tree/master/fs-starter

這里還有一個小細節(jié),你如果仔細查看我的案例會發(fā)下一個問題,就是我自定義的starter里并沒有META-INF/spring.factories配置文件,為什么還能生效呢?這是因為我的項目用的統(tǒng)一的包路徑:com.fs。spring配置默認會掃描當(dāng)前的包路徑,所以能加載到。但是筆者建議還是加上META-INF/spring.factories配置文件。

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

相關(guān)文章

  • 通過Java代碼技巧改善性能

    通過Java代碼技巧改善性能

    在本篇文章里小編給大家分享了關(guān)于通過Java代碼技巧改善性能的相關(guān)知識點,需要的朋友們參考下。
    2019-05-05
  • Java面試??贾瓹oncurrentHashMap多線程擴容機制詳解

    Java面試??贾瓹oncurrentHashMap多線程擴容機制詳解

    幾乎所有的后端技術(shù)面試官都要在?ConcurrentHashMap?技術(shù)的使用和原理方面對小伙伴們進行刁難,本文主要來和大家聊聊ConcurrentHashMap多線程的擴容機制,希望對大家有所幫助
    2023-05-05
  • SpringMVC @RequestBody的使用解析

    SpringMVC @RequestBody的使用解析

    這篇文章主要介紹了SpringMVC @RequestBody的使用解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot中關(guān)于static和templates的注意事項以及webjars的配置

    SpringBoot中關(guān)于static和templates的注意事項以及webjars的配置

    今天小編就為大家分享一篇關(guān)于SpringBoot中關(guān)于static和templates的注意事項以及webjars的配置,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java生成隨機時間的簡單隨機算法

    Java生成隨機時間的簡單隨機算法

    今天小編就為大家分享一篇關(guān)于Java生成隨機時間的簡單隨機算法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Java實現(xiàn)線程同步方法及原理詳解

    Java實現(xiàn)線程同步方法及原理詳解

    這篇文章主要介紹了Java實現(xiàn)線程同步方法及原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • springboot無法從靜態(tài)上下文中引用非靜態(tài)變量的解決方法

    springboot無法從靜態(tài)上下文中引用非靜態(tài)變量的解決方法

    這篇文章主要介紹了springboot無法從靜態(tài)上下文中引用非靜態(tài)變量的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-06-06
  • 解決IDEA光標變成白色粗條的問題

    解決IDEA光標變成白色粗條的問題

    這篇文章主要介紹了解決IDEA光標變成白色粗條的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • java代碼mqtt接收發(fā)送消息方式

    java代碼mqtt接收發(fā)送消息方式

    這篇文章主要介紹了java代碼mqtt接收發(fā)送消息方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 使用Jenkins配置Git+Maven的自動化構(gòu)建的方法

    使用Jenkins配置Git+Maven的自動化構(gòu)建的方法

    這篇文章主要介紹了使用Jenkins配置Git+Maven的自動化構(gòu)建的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01

最新評論