@Conditional系列註解例子

1. @Conditionalweb

說明:指定的Condition實現類,matches方法返回true則注入bean,false則不注入redis

@Configuration
public class BeanConfig {
 
    //只有一個類時,大括號能夠省略
    //若是WindowsCondition的實現方法返回true,則注入這個bean    
    @Conditional({WindowsCondition.class})
    @Bean(name = "bill")
    public Person person1(){
        return new Person("Bill Gates",62);
    }
 
    //若是LinuxCondition的實現方法返回true,則注入這個bean
    @Conditional({LinuxCondition.class})
    @Bean("linus")
    public Person person2(){
        return new Person("Linus",48);
    }
}

建立 LinuxCondition和 WindowsCondition類,並實現Condition接口app

public class LinuxCondition implements Condition {
 
    @Override
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
 
        Environment environment = conditionContext.getEnvironment();
 
        String property = environment.getProperty("os.name");
        if (property.contains("Linux")){
            return true;
        }
        return false;
    }
}

 

2. @ConditionalOnBeanide

說明:僅僅在當前上下文中存在某個對象時,纔會實例化一個Beanspa

//RedisOperBean依賴redisTemplate
@Component
@ConditionalOnBean(name="redisTemplate")
public class RedisOperBean {
  private final RedisTemplate redisTemplate;
  public RedisOperBean(RedisTemplate redisTemplate) {
      // ...
  }
}

 

3. @ConditionalOnClasscode

說明:某個class位於類路徑上,纔會實例化一個Bean,要求指定的class必須存在對象

 

4. @ConditionalOnPropertyblog

說明:token

(1)matchIfMissing:從application.properties中讀取某個屬性值,若是該值爲空,默認值爲true接口

(2)havingValue:經過其兩個屬性name以及havingValue來實現的,其中name用來從application.properties中讀取某個屬性值,若是該值爲空,則返回false;

        若是值不爲空,則將該值與havingValue指定的值進行比較,若是同樣則返回true;不然返回false。若是返回值爲false,則該configuration不生效;爲true則生效。

@Configuration
@ConditionalOnClass({ Feign.class })
@ConditionalOnProperty(value = "feign.oauth2.enabled", havingValue = "true", matchIfMissing = true)
public class OAuth2FeignAutoConfiguration {

    @Bean
    @ConditionalOnBean(OAuth2ClientContext.class)
    public RequestInterceptor oauth2FeignRequestInterceptor(OAuth2ClientContext oauth2ClientContext) {
        return new OAuth2FeignRequestInterceptor(oauth2ClientContext);
    }
}

 

5.@ConditionalOnMissingBean

說明:僅僅在當前上下文中不存在某個對象時,纔會實例化一個Bean

@Bean
    @ConditionalOnMissingBean(name = "imageValidateCodeGenerator")
    public ValidateCodeGenerator imageValidateCodeGenerator() {
        ImageCodeGenerator codeGenerator = new ImageCodeGenerator();
        codeGenerator.setSecurityProperty(securityProperties);
        return codeGenerator;
    }

 

6.@ConditionalOnMissingClass

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

 

7.@ConditionalOnExpression

說明:當表達式爲true的時候,纔會實例化一個Bean

@Configuration
@ConditionalOnExpression("${enabled:false}")
public class BigpipeConfiguration {
    @Bean
    public OrderMessageMonitor orderMessageMonitor(ConfigContext configContext) {
        return new OrderMessageMonitor(configContext);
    }
}

其餘樣式:

@ConditionalOnExpression("${mq.cumsumer.enabled}==1&&${rabbitmq.comsumer.enabled:true}")


@ConditionalOnExpression("'${mq.comsumer}'.equals('rabbitmq')")

 

8.@ConditionalOnNotWebApplication

說明:當前不是web應用

 

9.@ConditionalOnWebApplication

說明:當前是web應用

 

10. @ConditionalOnResource

說明:類路徑下是否存在指定的資源文件

@Bean
@ConditionalOnResource(resources="classpath:shiro.ini")
protected Realm iniClasspathRealm(){

}
相關文章
相關標籤/搜索