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

springboot自定義starter方法及注解實例

 更新時間:2022年08月03日 14:43:53   作者:索碼理  
這篇文章主要為大家介紹了springboot自定義starter方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

SpringBoot starter

用了springboot 那么久了居然都還沒自定義過starter,想想都覺得羞愧,所以今天來玩一下。

SpringBoot中的starter是一種非常重要的機制,能夠拋棄以前繁雜的配置,將其統(tǒng)一集成進starter,應(yīng)用者只需要在maven中引入starter依賴,SpringBoot就能自動掃描到要加載的信息并啟動相應(yīng)的默認配置。starter讓我們擺脫了各種依賴庫的處理,需要配置各種信息的困擾。

SpringBoot會自動通過classpath路徑下的類發(fā)現(xiàn)需要的Bean,并注冊進IOC容器。SpringBoot提供了針對日常企業(yè)應(yīng)用研發(fā)各種場景的spring-boot-starter依賴模塊。所有這些依賴模塊都遵循著約定成俗的默認配置,并允許我們調(diào)整這些配置,即遵循“約定大于配置”的理念。

自定義starter

日常工作中有時有一些獨立于業(yè)務(wù)之外的功能或模塊,可能這個項目在用,另一個項目也要用,如果每次都重新集成的話就會很麻煩,這時我們只要把這些功能或模塊封裝成一個個starter的話,在使用的時候引入進去就很方便了。

自定義starter步驟

其實自定義starter很簡單,大致需要以下5步:

  • 新建兩個模塊,命名規(guī)范: springboot自帶的starter命名規(guī)范為spring-boot-starter-xxx, 自定義的starter命名規(guī)范為xxx-spring-boot-starter

 xxx-spring-boot-autoconfigure:自動配置核心代碼

 xxx-spring-boot-starter:管理依賴

如果不需要將自動配置代碼和依賴項管理分離開來,則可以將它們組合到一個模塊中。只不過springboot

官方建議將兩個模塊分開。

  • 2. 引入spring-boot-autoconfigure依賴
  • 3. 創(chuàng)建自定義的XXXProperties 類: 這個類的屬性根據(jù)需要是要出現(xiàn)在配置文件中的。
  • 4. 創(chuàng)建自定義的XXXAutoConfiguration類:這個類要配置自動配置時的一些邏輯,同時也要讓XXXProperties 類生效。
  • 5. 創(chuàng)建自定義的spring.factories文件:在resources/META-INF創(chuàng)建一個spring.factories文件和spring-configuration-metadata.json,spring-configuration-metadata.json文件是用于在填寫配置文件時的智能提示,可要可不要,有的話提示起來更友好。spring.factories用于導(dǎo)入自動配置類,必須要有

實現(xiàn)

我這里為了方便就只創(chuàng)建一個模塊了,

  • 創(chuàng)建一個模塊,命名為spring-boot-starter-myStarter,對應(yīng)pom文件
	<groupId>com.example</groupId>
	<artifactId>spring-boot-starter-myStarter</artifactId>
	<version>1.0</version>
	<name>my-starter</name>
  • 引入spring-boot-autoconfigure依賴 我這里使用的spring-boot-autoconfigure版本是2.6.2
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-autoconfigure</artifactId>
			<version>2.6.2</version>
		</dependency>
	</dependencies>
  • 創(chuàng)建自定義的XXXProperties 類
@ConfigurationProperties(prefix = "com.arron")
public class MyStarterProperties {
    private String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

再創(chuàng)建一個MyStarterConfig用于讀取MyStarterProperties 里的屬性

public class MyStarterConfig {
    private MyStarterProperties myStarterProperties;
    private String name;
    public MyStarterConfig(MyStarterProperties myStarterProperties) {
        this.myStarterProperties = myStarterProperties;
    }
    public String getName() {
        return myStarterProperties.getName();
    }
    public void setName(String name) {
        this.name = name;
    }
}
  • 創(chuàng)建自定義的XXXAutoConfiguration類
@Configuration
// EnableConfigurationProperties value數(shù)組中的配置類起作用
@EnableConfigurationProperties(value = {MyStarterProperties.class})
public class MyStarterAutoConfiguration {
    @Autowired
    private MyStarterProperties myStarterProperties;
    @Bean
    @ConditionalOnMissingBean(MyStarterConfig.class)
    public MyStarterConfig myStarterConfig(){
        return new MyStarterConfig(myStarterProperties);
    }
}
  • 在resources/META-INF創(chuàng)建一個spring.factories文件

spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.example.myStarter.MyStarterAutoConfiguration

spring-configuration-metadata.json

{
  "group": [
    {
      "name": "com.arron",
      "type": "com.example.myStarter.MyStarterProperties",
      "sourceType": "com.example.myStarter.MyStarterProperties"
    }
  ],
  "properties": [
    {
      "name": "com.arron.name",
      "type": "java.lang.String",
      "description": "my start name",
      "sourceType": "com.example.myStarter.MyStarterProperties",
      "defaultValue": "MyStarterProperties name"
    }
  ]
}

打包測試

找到如圖maven,點擊install,安裝到本地

然后新建一個項目導(dǎo)包進行測試,創(chuàng)建項目過程就不介紹了。

  • 引入依賴
	<dependency>
       <groupId>com.example</groupId>
       <artifactId>spring-boot-starter-myStarter</artifactId>
       <version>1.0</version>
   </dependency>
  • 配置文件添加屬性:
com:
  arron:
    name: myname
  • 單元測試:
@RunWith(SpringRunner.class)
@SpringBootTest
class RabbitmqApplicationTests {
    @Autowired
    private MyStarterConfig myStarterConfig;
    @Test
    public void testMyStarter(){
        String name = myStarterConfig.getName();
        System.out.println(name);
    }
}

控制臺輸出:

myname

至此,一個簡單自定義的springboot starter就完成了。

注解解釋

下面這些注解在自定義starter是可能會用到。

  • @Conditional:按照一定的條件進行判斷,滿足條件給容器注冊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

以上就是springboot自定義starter方法詳解的詳細內(nèi)容,更多關(guān)于springboot自定義starter的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • maven打包失敗踩坑的解決方式詳解

    maven打包失敗踩坑的解決方式詳解

    最近因為新項目有很多自定義的jar包,而且占內(nèi)存很多,就直接拷貝過來,新開了一個maven倉庫,用的時候沒有問題,但是打包一直編譯不通過,下面這篇文章主要給大家介紹了關(guān)于maven打包失敗踩坑的解決方式,需要的朋友可以參考下
    2023-05-05
  • Hystrix?Turbine聚合監(jiān)控的實現(xiàn)詳解

    Hystrix?Turbine聚合監(jiān)控的實現(xiàn)詳解

    微服務(wù)架構(gòu)下,?個微服務(wù)往往部署多個實例,如果每次只能查看單個實例的監(jiān)控,就需要經(jīng)常切換很不?便,在這樣的場景下,我們可以使??Hystrix?Turbine?進?聚合監(jiān)控,它可以把相關(guān)微服務(wù)的監(jiān)控數(shù)據(jù)聚合在?起,便于查看
    2022-09-09
  • Java Web請求與響應(yīng)實例詳解

    Java Web請求與響應(yīng)實例詳解

    這篇文章主要介紹了Java Web請求與響應(yīng)實例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-05-05
  • ZooKeeper入門教程三分布式鎖實現(xiàn)及完整運行源碼

    ZooKeeper入門教程三分布式鎖實現(xiàn)及完整運行源碼

    本文是ZooKeeper入門系列教程,分布式鎖有多種實現(xiàn)方式,比如通過數(shù)據(jù)庫、redis都可實現(xiàn)。作為分布式協(xié)同工具ZooKeeper,當(dāng)然也有著標(biāo)準(zhǔn)的實現(xiàn)方式。本文介紹在zookeeper中如何實現(xiàn)排他鎖
    2022-01-01
  • Java面試之如何實現(xiàn)10億數(shù)據(jù)判重

    Java面試之如何實現(xiàn)10億數(shù)據(jù)判重

    當(dāng)數(shù)據(jù)量比較大時,使用常規(guī)的方式來判重就不行了,所以這篇文章小編主要來和大家介紹一下Java實現(xiàn)10億數(shù)據(jù)判重的相關(guān)方法,希望對大家有所幫助
    2024-02-02
  • Java中Base64加密解密舉例詳解

    Java中Base64加密解密舉例詳解

    Base64編碼是我們程序開發(fā)中經(jīng)常使用到的編碼方法,它是一種基于用64個可打印字符來表示二進制數(shù)據(jù)的表示方法,這篇文章主要給大家介紹了關(guān)于Java中Base64加密解密的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • Java實現(xiàn)合并兩個word文檔內(nèi)容

    Java實現(xiàn)合并兩個word文檔內(nèi)容

    這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)合并兩個word文檔內(nèi)容,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • Java的Object類九個方法技巧

    Java的Object類九個方法技巧

    這篇文章主要介紹了Java的Object類九個方法技巧,Java的Object?類的完整路徑是java.lang.Object?,是所有類的父類編譯,下文相關(guān)資料,需要的朋友可以參考一下
    2022-04-04
  • Java數(shù)組操作的10大方法

    Java數(shù)組操作的10大方法

    下面是精心整理的Java數(shù)組操作的10大方法,大部分代碼都來自Stack Overflow,需要的朋友可以參考下
    2014-09-09
  • IDEA中查看類繼承圖和類源碼的騷操作

    IDEA中查看類繼承圖和類源碼的騷操作

    這篇文章主要介紹了IDEA中查看類繼承圖和類源碼的騷操作,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02

最新評論

兴山县| 新兴县| 永嘉县| 信丰县| 平潭县| 普兰店市| 汽车| 尉犁县| 景德镇市| 来凤县| 陆川县| 米泉市| 凭祥市| 东乡族自治县| 上饶县| 永清县| 乳山市| 洪雅县| 阿勒泰市| 枝江市| 黎平县| 景东| 保亭| 津市市| 宜州市| 措勤县| 伊宁县| 合山市| 南昌县| 锦州市| 宁强县| 蒙山县| 台南市| 墨脱县| 新蔡县| 清徐县| 湄潭县| 交口县| 平塘县| 浮山县| 南部县|