【spring】【二】@Conditional

@Conditional的使用

  • 作用:根據(jù)條件,決定類是否加載到Spring Ioc容器中,在SpringBoot中有大量的運(yùn)用
  • 應(yīng)用場景:在一些需要條件滿足才是實例化的類中,使用此注解,我曾經(jīng)在項目中需要根據(jù)不同的場景使用不同的mq中間件的時候使用過,在mq的實例化bean上,加上此注解,根據(jù)配置文件的不同,來決定這個bean是否加載至ioc容器中。

使用方法

  1. 實現(xiàn)Conditional接口, 實現(xiàn)matches方法。

    public class MqExistsCondition implements Condition{
    
     @Override
     public boolean matches(ConditionContext context,AnnotatedTypeMetadata metadata)     {
         Environment environment = context.getEnvironment();
         //從這里獲取配置文件中 active 的值,根據(jù)當(dāng)前的active值決定是否加載類
            String[] activeProfiles = environment.getActiveProfiles();
         for (String active : activeProfiles) {
             if(active.equals(ActiveEnum.open_active.getActive().toString())){
                 return true;
             }
         }
         return false;
     }
    }
    
  2. 在需要判斷條件的bean上,加上**@Conditional(TestExistsCondition.class) **即可在滿足條件的時候加載對應(yīng)的類。

     @Bean
        @Conditional(TestMqExistsCondition.class)
        public TestBean getTestBean(){
         TestBean testBean = new TestBean();
         return testBean;
        }
    

其他派生的的conditional

@ConditionalOnClass

? 如果此class不存在

@ConditionalOnMissingBean

? 只有對應(yīng)的ban在系統(tǒng)中都沒有被創(chuàng)建,它修飾的初始化代碼塊才會執(zhí)行,用戶自己手動創(chuàng)建的bean優(yōu)先

@ConditionalOnBean

僅僅在當(dāng)前上下文中存在某個對象時,才會實例化一個Bean。

@ConditionalOnClass

? 某個class位于類路徑上,才會實例化一個Bean

@ConditionalOnExpression

? 當(dāng)表達(dá)式為true的時候,才會實例化一個Bean。

比如:

@ConditionalOnExpression("true")

@ConditionalOnExpression("${my.controller.enabled:false}")

@ConditionalOnMissingBean

? 僅僅在當(dāng)前上下文中不存在某個對象時,才會實例化一個Bean

@ConditionalOnMissingClass

某個class類路徑上不存在的時候,才會實例化一個Bean

@ConditionalOnNotWebApplication

? 不是web應(yīng)用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容