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(){ }