- @Conditional注解可以根据代码中设置的条件装载不同的bean,符合条件则加载该bean,不符合则不加载该bean
参数 |
描述 |
value |
指定注册的类class,默认为{},即当前类 |
- @Conditional注解衍生了以下子注解:
子注解 |
说明 |
||||||||||
@ConditionalOnJava |
系统的java版本是否符合要求 |
||||||||||
@ConditionalOnBean |
容器中存在指定Bean |
||||||||||
@ConditionalOnMissingBean |
容器中不存在指定Bean |
||||||||||
@ConditionalOnExpression |
满足SpEl表达式指定 |
||||||||||
@ConditionalOnClass |
系统中有指定类 |
||||||||||
@ConditionalOnMissing |
系统值没有指定类 |
||||||||||
@ConditionalOnSingleCandidate |
容器中只有一个指定的Bean,或者这个Bean是首选Bean |
||||||||||
@ConditionalOnProperty |
系统中指定的属性是否有指定的值
|
||||||||||
@ConditionalOnResource |
类路径下是否存在指定资源文件 |
||||||||||
@ConditionalOnWebApplication |
当前是web环境 |
||||||||||
@ConditionalOnNotWebApplication |
当前不是web环境 |
||||||||||
@ConditionalOnjindi |
JNDI存在指定项 |
示例
@Configuration
public class PersonConfigure {
@Bean(name="bill")
@ConditionalOnClass({User.class})
public Person person1(){
return new Person("Bill Gates",62);
}
}
自定义Condtional
- 可以通过实现Condtional接口类,自定Condtional类进行判断
示例
- MyConditional.java
public class MyConditional implements Condition { @Override public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) { Environment environment = conditionContext.getEnvironment(); String property = environment.getProperty("os.name"); if(property.contains("Windows")){ return true; } return false; } } |
- PersonConfigure.java
@Configuration
public class PersonConfigure {
@Bean(name="bill")
@Conditional({MyConditional.class}) //如果满足MyConditional返回true,继续加载下面这个方法
public Person person1(){
return new Person("Bill Gates",62);
}
}