您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)Spring中@Conditional條件注解如何使用,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
我們看到 @Conditional 注解接收的參數(shù)是 extends Condition 接口的泛型類,也就是說(shuō),我們要使用 @Conditional 注解,只需要實(shí)現(xiàn) Condition 接口并重寫其方法即可:
簡(jiǎn)單找下Spring家族其他的案例實(shí)現(xiàn)SpringBootCondition
Spring Boot使用的所有Condition實(shí)現(xiàn)的基礎(chǔ)。提供合理的日志記錄,以幫助用戶診斷要加載的類。
無(wú)意中在網(wǎng)上看到一種比較形象的理解:如果將Application Context 比作大廳,Spring Boot 在 @Conditional 注解的基礎(chǔ)上進(jìn)行了細(xì)化,無(wú)需出示復(fù)雜的介紹信 (實(shí)現(xiàn) Condition 接口),只需要手持預(yù)定義好的 @ConditionalOnXxxx 注解印章的門票,如果驗(yàn)證通過,就會(huì)走進(jìn) Application Context 大廳SpringBoot Condition 拓展實(shí)現(xiàn)
逐個(gè)打開這 13 個(gè)注解,我們發(fā)現(xiàn)這些注解上有相同的元注解
從這些標(biāo)記上我們可以了解如下內(nèi)容:
都可以應(yīng)用在 TYPE 上,也就是說(shuō),Spring 自動(dòng)掃描的一切類 (@Configuration, @Component, @Service, @Repository, or @Controller) 都可以通過添加相應(yīng)的 @ConditionalOnXxxx 來(lái)判斷是否加載
都可以應(yīng)用在 METHOD 上,所以有 @Bean 標(biāo)記的方法也可以應(yīng)用這些注解
都是用了 @Conditional 注解來(lái)標(biāo)記,OnBeanCondition 等自定義 Condition 還是實(shí)現(xiàn)了 Condition 接口的,換湯不換藥,沒什么神秘的,只不過做了更具象的封裝罷了,來(lái)看類依賴圖(簡(jiǎn)化的類圖)
其實(shí)用法都大同小異,看了源碼以后發(fā)現(xiàn)原理很簡(jiǎn)單,這里簡(jiǎn)單歸納下用法:
除了自己自定義Condition之外,Spring還提供了很多Condition給我們用
@ConditionalOnBean
僅僅在當(dāng)前上下文中存在某個(gè)對(duì)象時(shí),才會(huì)實(shí)例化一個(gè)Bean
@ConditionalOnClass
某個(gè)class位于類路徑上,才會(huì)實(shí)例化一個(gè)Bean
@ConditionalOnExpression
當(dāng)表達(dá)式為true的時(shí)候,才會(huì)實(shí)例化一個(gè)Bean
@ConditionalOnMissingBean
僅僅在當(dāng)前上下文中不存在某個(gè)對(duì)象時(shí),才會(huì)實(shí)例化一個(gè)Bean
@ConditionalOnMissingClass
某個(gè)class類路徑上不存在的時(shí)候,才會(huì)實(shí)例化一個(gè)Bean
@ConditionalOnNotWebApplication
不是web應(yīng)用
@ConditionalOnProperty
指在配置里配置的屬性是否為true,才會(huì)實(shí)例化一個(gè)Bean)
@ConditionalOnResource
如果我們要加載的 bean 依賴指定資源是否存在于 classpath 中,那么我們就可以使用這個(gè)注解
@ConditionalOnJndi
只有指定的資源通過 JNDI 加載后才加載 bean
@ConditionalOnCloudPlatform
只有運(yùn)行在指定的云平臺(tái)上才加載指定的 bean,CloudPlatform 是 org.springframework.boot.cloud 下一個(gè) enum 類型的類,大家可以打開自行看看
關(guān)于Spring中@Conditional條件注解如何使用就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。