成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

創(chuàng)建屬于自己的 Spring Boot 自動配置

DC_er / 535人閱讀

摘要:介紹這里有官方提供的演示項目和介紹本筆記也是通過官方提供的演示項目來進(jìn)行講解我們可以看到官方的項目中有三個模塊和其中是演示如何使用自動配置是自動配置時的一些邏輯處理比較簡單其中只有一些項目的依賴比如我們使用的

介紹

這里有官方提供的 演示項目 和 介紹.

本筆記也是通過官方提供的演示項目來進(jìn)行講解.

我們可以看到官方的項目中有三個模塊, hornetq-sample-app hornetq-spring-boot-autoconfigurehornetq-spring-boot-starter.

其中 hornetq-sample-app 是演示如何使用自動配置, hornetq-spring-boot-autoconfigure 是自動配置時的一些邏輯處理, hornetq-spring-boot-starter 比較簡單其中只有一些項目的依賴; 比如我們使用的自動配置是針對哪個框架, 以及框架所需要的其它第三方框架都可以放入此工程.

當(dāng)然可能有人會問到我是否可以將 hornetq-spring-boot-autoconfigurehornetq-spring-boot-starter 模塊, 合并到一起? 當(dāng)然你也可以這樣做, 但是我覺得分開的話會逼格高一些.

autoconfigure 模塊重點

首先來看一下 pom 文件, 在此文件中有一個最主要的依賴.


        org.springframework.boot
        spring-boot-autoconfigure

這個依賴可牛逼了, 此依賴主要有我們要用到的注解和重要的 spring.factories 文件. 當(dāng)然了此依賴中還有一些其它框架的配置.

下面我們在說一下在自動配置時, 一些重要的注解.

在這個模塊中最主要的兩個類 HornetQAutoConfigurationHornetQProperties. 我們在配置文件中配置的屬性就會封裝成 HornetQProperties 對象. 那么怎么知道我們需要哪些配置呢? 當(dāng)然是使用 @ConfigurationProperties("hornetq") 注解了, 其中 hornetq 是一個前綴. 也可以使用 @Value 注解來幫我們賦值.

如:

hornetq.host="localhost"

hornetq:
    host: "localhost"
前綴可以更詳細(xì) spring.hornetq.host

接下來詳細(xì)說一下 HornetQAutoConfiguration 類中的注解.

@Configuration
@AutoConfigureBefore(JmsAutoConfiguration.class)
@ConditionalOnClass({ConnectionFactory.class, HornetQJMSClient.class})
@ConditionalOnMissingBean(ConnectionFactory.class)
@EnableConfigurationProperties(HornetQProperties.class)
public class HornetQAutoConfiguration {

從上往下一個一個來, @Configuration 注解表示一個配置類.

如果我們的自動配置需要等待某個對象配置完成, 這個時候可以使用 @AutoConfigureAfter@AutoConfigureBefore 注解, 表明在指定類之后之前配置.

也可以使用 @AutoconfigureOrder 注解, 這個注解類似于 @Order, 但是它是專門給 auto-configuration 使用.

我個人覺得 @ConditionalOnClass 注解非常重要, 注解主要在 classpath 目錄下存在時指定的類時, 才會解析當(dāng)前配置類. 這也就是為啥我們不附加相應(yīng)依賴的時候程序還可以運行的原因. 還有一個與此注解邏輯相反的注解 @ConditionalOnMissingClass 當(dāng)不存在指定類的時候, 才會解析當(dāng)前配置類.

@ConditionalOnMissingBean 通過實例的類型、類名、注解、昵稱去查找是否存在對應(yīng)的 Bean 如果存在, 則不回去解析. 還有一個與此注解邏輯相反的注解 @ConditionalOnBean 當(dāng)存在指定 Bean 的時候才會去解析.

@EnableConfigurationProperties 注解是用來開啟對 @ConfigurationProperties 注解配置Bean的支持.

在本類下還有一個靜態(tài)內(nèi)部類

@Configuration
@ConditionalOnClass(name = EMBEDDED_JMS_CLASS)
@ConditionalOnProperty(prefix = "hornetq.embedded", value = "enabled", havingValue = "true", matchIfMissing = true)
static class EmbeddedServerConfiguration {

@ConditionalOnProperty 注解能夠控制某個 configuration 是否生效. 具體操作是通過其兩個屬性 name 以及 havingValue 來實現(xiàn)的, 其中 name 用來從 application.properties 中讀取某個屬性值, 如果該值為空則返回false; 如果值不為空, 則將該值與 havingValue 指定的值進(jìn)行比較, 如果一樣則返回 true; 否則返回 false. 如果返回值為false, 則該 configuration 不生效; 為 true 則生效.

value 屬性和 name 屬性一樣都是數(shù)組, 但是不能和 name 屬性同時使用.

matchIfMissing 判斷當(dāng)沒有找到 enabled 時, 是否繼續(xù)加載. 為 true 則繼續(xù)加載, 否則報錯.

最主要的其實還是 HornetQAutoConfiguration 類上的注解, 大家可以參考官方的項目來寫一個屬于自己的自動配置類.

spring.factories 文件

在文章發(fā)布后重新閱讀了一下文章, 發(fā)現(xiàn)忘了寫此文件的作用.

spring.factories 文件主要的作用就是讓 Spring Boot 來自動配置相關(guān)類.

org.springframework.boot.autoconfigure.EnableAutoConfiguration=hornetq.autoconfigure.HornetQAutoConfiguration
文件路徑 src/main/resources/META-INF/spring.factories

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/72412.html

相關(guān)文章

  • 70 個 Spring 最常見面試題,Java 晉升必會

    摘要:容器自動完成裝載,默認(rèn)的方式是這部分重點在常用模塊的使用以及的底層實現(xiàn)原理。 對于那些想面試高級 Java 崗位的同學(xué)來說,除了算法屬于比較「天方夜譚」的題目外,剩下針對實際工作的題目就屬于真正的本事了,熱門技術(shù)的細(xì)節(jié)和難點成為了主要考察的內(nèi)容。 這里說「天方夜譚」并不是說算法沒用,不切實際,而是想說算法平時其實很少用到,甚至面試官都對自己出的算法題一知半解。 這里總結(jié)打磨了 70 道...

    Ashin 評論0 收藏0
  • Spring Boot 框架介紹和使用

    摘要:使用還是,根據(jù)個人喜好即可。如果錯誤頁面也需要使用模板引擎動態(tài)生成,那么放在下面的路徑。數(shù)據(jù)庫自動配置嵌入式數(shù)據(jù)庫如果類路徑中包含或的相應(yīng)包,那么就會自動配置這些嵌入式數(shù)據(jù)庫的實例和數(shù)據(jù)源。 本文參考自Spring Boot文檔。 Spring Boot 簡介 Spring框架功能很強大,但是就算是一個很簡單的項目,我們也要配置很多東西。因此就有了Spring Boot框架,它的作用很...

    Zack 評論0 收藏0
  • Spring Boot 最核心 3 個注解詳解

    摘要:核心注解講解最大的特點是無需配置文件,能自動掃描包路徑裝載并注入對象,并能做到根據(jù)下的包自動配置。所以最核心的個注解就是這是添加的一個注解,用來代替配置文件,所有這個配置文件里面能做到的事情都可以通過這個注解所在類來進(jìn)行注冊。 最近面試一些 Java 開發(fā)者,他們其中有些在公司實際用過 Spring Boot, 有些是自己興趣愛好在業(yè)余自己學(xué)習(xí)過。然而,當(dāng)我問他們 Spring Boo...

    hzx 評論0 收藏0
  • Spring-Boot學(xué)習(xí)筆記

    摘要:學(xué)習(xí)筆記使用很容易創(chuàng)建一個獨立運行運行內(nèi)嵌容器準(zhǔn)生產(chǎn)級別的基于框架的項目,使用你可以不用或者只需要很少的配置。異常消息如果這個錯誤是由異常引起的。錯誤發(fā)生時請求的路徑。 Spring-Boot 1.5 學(xué)習(xí)筆記 使用Spring Boot很容易創(chuàng)建一個獨立運行(運行jar,內(nèi)嵌Servlet容器)、準(zhǔn)生產(chǎn)級別的基于Spring框架的項目,使用Spring Boot你可以不用或者只需要很...

    curlyCheng 評論0 收藏0
  • 全棧開發(fā)——動手打造屬于自己直播間(Vue+SpringBoot+Nginx)

    摘要:經(jīng)過琢磨,其實是要考慮安全性的。具體在以下幾個方面跨域連接協(xié)議升級前握手?jǐn)r截器消息信道攔截器對于跨域問題,我們可以通過方法來設(shè)置可連接的域名,防止跨站連接。 前言 大學(xué)的學(xué)習(xí)時光臨近尾聲,感嘆時光匆匆,三年一晃而過。同學(xué)們都忙著找工作,我也在這里拋一份簡歷吧,歡迎各位老板和獵手誠邀。我們進(jìn)入正題。直播行業(yè)是當(dāng)前火熱的行業(yè),誰都想從中分得一杯羹,直播養(yǎng)活了一大批人,一個平臺主播粗略估計就...

    e10101 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<