中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot2中怎么自定義starter

發布時間:2021-12-27 17:13:18 來源:億速云 閱讀:117 作者:iii 欄目:大數據

本篇內容介紹了“Spring Boot2中怎么自定義starter”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

WebSockets

Spring Boot為內嵌的Tomcat(8和7),Jetty 9和Undertow提供WebSockets自動配置。如果你正在將war包部署到獨立容器中,Spring Boot將假設該容器會負責配置WebSocket。Spring框架提供豐富的WebSocket支持,只需要添加spring-boot-starter-websocket模塊即可。

Web Services

Spring Boot提供Web Services自動配置,你需要的就是定義Endpoints。通過添加spring-boot-starter-webservices模塊可以獲取Spring Web Services特性。

創建自己的auto-configuration

如果你在公司里開發共享libraries,或者正在開發一個開源或商業library,你可能想開發自己的自動配置(auto-configuration)。自動配置類可以打包到外部jars,并且依舊可以被Spring Boot識別。自動配置可以關聯一個”starter”,用于提供auto-configuration的代碼及需要引用的libraries。我們首先講解構建自己的auto-configuration需要知道哪些內容,。

注意

可參考demo工程了解如何一步步創建一個starter。

理解自動配置的beans

從底層來講,自動配置(auto-configuration)是通過標準的@Configuration類實現的。此外,@Conditional注解用來約束自動配置生效的條件。通常自動配置類需要使用@ConditionalOnClass和@ConditionalOnMissingBean注解,這是為了確保只有在相關的類被發現及沒有聲明自定義的@Configuration時才應用自動配置,具體查看spring-boot-autoconfigure源碼中的@Configuration類(META-INF/spring.factories文件)。

定位自動配置候選者

Spring Boot會檢查你發布的jar中是否存在META-INF/spring.factories文件,該文件中以EnableAutoConfiguration為key的屬性應該列出你的配置類:

11 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
22 com.mycorp.libx.autoconfigure.LibXAutoConfiguration,\
33 com.mycorp.libx.autoconfigure.LibXWebAutoConfiguration

你可以使用@AutoConfigureAfter或@AutoConfigureBefore注解為配置類指定特定的順序。例如,如果你提供web-specific配置,你的類就需要應用在WebMvcAutoConfiguration后面。

你也可以使用@AutoconfigureOrder注解為那些相互不知道存在的自動配置類提供排序,該注解語義跟常規的@Order注解相同,但專為自動配置類提供順序。

注意

自動配置類只能通過這種方式加載,確保它們定義在一個特殊的package中,特別是不能成為組件掃描的目標。

條件注解

你幾乎總是需要在自己的自動配置類里添加一個或更多的@Conditional注解。@ConditionalOnMissingBean注解是一個常見的示例,開發者可以用它覆蓋自動配置類提供的默認行為。

Spring Boot包含很多@Conditional注解,你可以在自己的代碼中通過注解@Configuration類或單獨的@Bean方法來重用它們。

Class條件

@ConditionalOnClass和@ConditionalOnMissingClass注解可以根據特定類是否出現來決定配置的包含,由于注解元數據是使用ASM來解析的,所以你可以使用value屬性來引用真正的類,即使該類沒有出現在運行應用的classpath下,也可以使用name屬性如果你傾向于使用字符串作為類名。

Bean條件

@ConditionalOnBean和@ConditionalOnMissingBean注解可以根據特定類是否存在決定bean的包含,你可以使用value屬性指定beans(by type),也可以使用name定義beans(by name),search屬性用于限制搜索beans時需要考慮的ApplicationContext層次。

注意

你需要注意bean定義添加的順序,因為這些條件的計算是基于目前處理內容的。出于這個原因,我們推薦在自動配置類上只使用@ConditionalOnBean和@ConditionalOnMissingBean注解(即使保證它們在其他用戶定義的beans后加載)。

注意

@ConditionalOnBean和@ConditionalOnMissingBean不會阻止@Configuration類的創建,在類級別使用那些conditions跟使用注解標記每個@Bean方法是等價的。

Property條件

@ConditionalOnProperty注解可以根據一個Spring Environment屬性來決定是否包含配置,使用prefix和name屬性指定要檢查的配置。默認情況下,任何存在的只要不是false的屬性都會匹配,你也可以使用havingValue和matchIfMissing屬性創建更高級的檢測。

Resource條件

@ConditionalOnResource注解只在特定資源出現時才會包含配置,可以使用常見的Spring約定命名資源,例如file:/home/user/test.dat。

Web Application條件

@ConditionalOnWebApplication和@ConditionalOnNotWebApplication注解可以根據應用是否為’web應用’來決定是否包含配置,web應用是任何使用Spring WebApplicationContext,定義一個session作用域,或有一個StandardServletEnvironment的應用。

SpEL表達式條件

@ConditionalOnExpression注解可以根據SpEL表達式結果來決定是否包含配置。

創建自己的starter

一個完整的Spring Boot starter可能包含以下組件:

  • autoconfigure模塊,包含自動配置類的代碼。

  • starter模塊,提供自動配置模塊及其他有用的依賴,簡而言之,添加本starter就能開始使用該library。

注意

如果不需要將它們分離開來,你可以將自動配置代碼和依賴管理放到一個單一模塊中。

命名

確保為你的starter提供一個合適的命名空間(namespace),模塊名不要以spring-boot作為開頭,盡管使用一個不同的Maven groupId,未來我們可能會為你正在做的自動配置提供官方支持。

這里是經驗之談,假設你正在為“acme”創建一個starter,命名自動配置模塊為acme-spring-boot-autoconfigure,命名starter為acme-spring-boot-starter,如果只有一個模塊結合它們,通常會使用acme-spring-boot-starter。

此外,如果你的starter提供配置keys,需要為它們提供一個合適的命名空間,特別是不要使用Spring Boot的命名空間(比如,server,management,spring等),這些是屬于Spring Boot的,我們可能會在將來以相同方式提高/修改它們,這可能會破壞你的東西。

確保觸發meta-data生成,這樣IDE輔助也就可以用于你的keys了,你可能想檢查生成的元數據(META-INF/spring-configuration-metadata.json)以確保keys被正確的文檔化。

自動配置模塊

自動配置模塊包含了使用該library需要的任何東西,它可能還包含配置的keys定義(@ConfigurationProperties)和用于定義組件如何初始化的回調接口。

注意

你需要將對該library的依賴標記為可選的,這樣在項目中添加該自動配置模塊就更容易了。如果你這樣做,該library將不會提供,Spring Boot會回退到默認設置。

Starter模塊

starter模塊實際是一個空jar,它的目的是提供使用該library所需的必要依賴。不要對添加你的starter的項目做任何假設,如果你正在自動配置的library需要其他starters,一定要提到它。提供一個合適的默認依賴集可能比較困難,特別是存在大量可選依賴時,你應該避免引入任何非必需的依賴。

“Spring Boot2中怎么自定義starter”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

湖口县| 临湘市| 安远县| 区。| 昌平区| 康乐县| 德钦县| 上林县| 宁化县| 银川市| 贵溪市| 青铜峡市| 盐边县| 澳门| 隆回县| 太湖县| 工布江达县| 南昌县| 始兴县| 习水县| 金坛市| 安化县| 周口市| 灌阳县| 成武县| 夏邑县| 莱西市| 尤溪县| 双城市| 乌拉特中旗| 铁力市| 元江| 阜康市| 留坝县| 上林县| 安化县| 桐城市| 巴楚县| 永州市| 康保县| 岳阳县|