摘要:介紹這里有官方提供的演示項目和介紹本筆記也是通過官方提供的演示項目來進行講解我們可以看到官方的項目中有三個模塊和其中是演示如何使用自動配置是自動配置時的一些邏輯處理比較簡單其中只有一些項目的依賴比如我們使用的
介紹
這里有官方提供的 演示項目 和 介紹.
本筆記也是通過官方提供的演示項目來進行講解.
我們可以看到官方的項目中有三個模塊, hornetq-sample-app hornetq-spring-boot-autoconfigure 和 hornetq-spring-boot-starter.
其中 hornetq-sample-app 是演示如何使用自動配置, hornetq-spring-boot-autoconfigure 是自動配置時的一些邏輯處理, hornetq-spring-boot-starter 比較簡單其中只有一些項目的依賴; 比如我們使用的自動配置是針對哪個框架, 以及框架所需要的其它第三方框架都可以放入此工程.
當然可能有人會問到我是否可以將 hornetq-spring-boot-autoconfigure 和 hornetq-spring-boot-starter 模塊, 合并到一起? 當然你也可以這樣做, 但是我覺得分開的話會逼格高一些.
autoconfigure 模塊重點首先來看一下 pom 文件, 在此文件中有一個最主要的依賴.
org.springframework.boot spring-boot-autoconfigure
這個依賴可牛逼了, 此依賴主要有我們要用到的注解和重要的 spring.factories 文件. 當然了此依賴中還有一些其它框架的配置.
下面我們在說一下在自動配置時, 一些重要的注解.
在這個模塊中最主要的兩個類 HornetQAutoConfiguration 和 HornetQProperties. 我們在配置文件中配置的屬性就會封裝成 HornetQProperties 對象. 那么怎么知道我們需要哪些配置呢? 當然是使用 @ConfigurationProperties("hornetq") 注解了, 其中 hornetq 是一個前綴. 也可以使用 @Value 注解來幫我們賦值.
如:
hornetq.host="localhost"
或
hornetq: host: "localhost"
前綴可以更詳細 spring.hornetq.host
接下來詳細說一下 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 目錄下存在時指定的類時, 才會解析當前配置類. 這也就是為啥我們不附加相應依賴的時候程序還可以運行的原因. 還有一個與此注解邏輯相反的注解 @ConditionalOnMissingClass 當不存在指定類的時候, 才會解析當前配置類.
@ConditionalOnMissingBean 通過實例的類型、類名、注解、昵稱去查找是否存在對應的 Bean 如果存在, 則不回去解析. 還有一個與此注解邏輯相反的注解 @ConditionalOnBean 當存在指定 Bean 的時候才會去解析.
@EnableConfigurationProperties 注解是用來開啟對 @ConfigurationProperties 注解配置Bean的支持.
在本類下還有一個靜態內部類
@Configuration @ConditionalOnClass(name = EMBEDDED_JMS_CLASS) @ConditionalOnProperty(prefix = "hornetq.embedded", value = "enabled", havingValue = "true", matchIfMissing = true) static class EmbeddedServerConfiguration {
@ConditionalOnProperty 注解能夠控制某個 configuration 是否生效. 具體操作是通過其兩個屬性 name 以及 havingValue 來實現的, 其中 name 用來從 application.properties 中讀取某個屬性值, 如果該值為空則返回false; 如果值不為空, 則將該值與 havingValue 指定的值進行比較, 如果一樣則返回 true; 否則返回 false. 如果返回值為false, 則該 configuration 不生效; 為 true 則生效.
value 屬性和 name 屬性一樣都是數組, 但是不能和 name 屬性同時使用.
matchIfMissing 判斷當沒有找到 enabled 時, 是否繼續加載. 為 true 則繼續加載, 否則報錯.
最主要的其實還是 HornetQAutoConfiguration 類上的注解, 大家可以參考官方的項目來寫一個屬于自己的自動配置類.
spring.factories 文件在文章發布后重新閱讀了一下文章, 發現忘了寫此文件的作用.
spring.factories 文件主要的作用就是讓 Spring Boot 來自動配置相關類.
org.springframework.boot.autoconfigure.EnableAutoConfiguration=hornetq.autoconfigure.HornetQAutoConfiguration
文件路徑 src/main/resources/META-INF/spring.factories
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/72412.html
摘要:容器自動完成裝載,默認的方式是這部分重點在常用模塊的使用以及的底層實現原理。 對于那些想面試高級 Java 崗位的同學來說,除了算法屬于比較「天方夜譚」的題目外,剩下針對實際工作的題目就屬于真正的本事了,熱門技術的細節和難點成為了主要考察的內容。 這里說「天方夜譚」并不是說算法沒用,不切實際,而是想說算法平時其實很少用到,甚至面試官都對自己出的算法題一知半解。 這里總結打磨了 70 道...
摘要:使用還是,根據個人喜好即可。如果錯誤頁面也需要使用模板引擎動態生成,那么放在下面的路徑。數據庫自動配置嵌入式數據庫如果類路徑中包含或的相應包,那么就會自動配置這些嵌入式數據庫的實例和數據源。 本文參考自Spring Boot文檔。 Spring Boot 簡介 Spring框架功能很強大,但是就算是一個很簡單的項目,我們也要配置很多東西。因此就有了Spring Boot框架,它的作用很...
摘要:核心注解講解最大的特點是無需配置文件,能自動掃描包路徑裝載并注入對象,并能做到根據下的包自動配置。所以最核心的個注解就是這是添加的一個注解,用來代替配置文件,所有這個配置文件里面能做到的事情都可以通過這個注解所在類來進行注冊。 最近面試一些 Java 開發者,他們其中有些在公司實際用過 Spring Boot, 有些是自己興趣愛好在業余自己學習過。然而,當我問他們 Spring Boo...
摘要:學習筆記使用很容易創建一個獨立運行運行內嵌容器準生產級別的基于框架的項目,使用你可以不用或者只需要很少的配置。異常消息如果這個錯誤是由異常引起的。錯誤發生時請求的路徑。 Spring-Boot 1.5 學習筆記 使用Spring Boot很容易創建一個獨立運行(運行jar,內嵌Servlet容器)、準生產級別的基于Spring框架的項目,使用Spring Boot你可以不用或者只需要很...
摘要:經過琢磨,其實是要考慮安全性的。具體在以下幾個方面跨域連接協議升級前握手攔截器消息信道攔截器對于跨域問題,我們可以通過方法來設置可連接的域名,防止跨站連接。 前言 大學的學習時光臨近尾聲,感嘆時光匆匆,三年一晃而過。同學們都忙著找工作,我也在這里拋一份簡歷吧,歡迎各位老板和獵手誠邀。我們進入正題。直播行業是當前火熱的行業,誰都想從中分得一杯羹,直播養活了一大批人,一個平臺主播粗略估計就...
閱讀 1433·2021-09-22 15:52
閱讀 1475·2019-08-30 15:44
閱讀 903·2019-08-30 14:24
閱讀 2714·2019-08-30 13:06
閱讀 2709·2019-08-26 13:45
閱讀 2790·2019-08-26 13:43
閱讀 1027·2019-08-26 12:01
閱讀 1450·2019-08-26 11:56