@Conditional的使⽤及使⽤场景
@Conditional的使⽤
作⽤:根据条件,决定类是否加载到Spring Ioc容器中,在SpringBoot中有⼤量的运⽤
应⽤场景:在⼀些需要条件满⾜才是实例化的类中,使⽤此注解,我曾经在项⽬中需要根据不同的场景使⽤不同的mq中间件的时候使⽤过,在mq的实例化bean上,加上此注解,根据配置⽂件的不同,来决定这个bean是否加载⾄ioc容器中。
使⽤⽅法
1. 实现Conditional接⼝, 实现matches⽅法。
public class MqExistsCondition implements Condition{
@Override
public boolean matches(ConditionContext context,AnnotatedTypeMetadata metadata) {
Environment environment = Environment();
上海网球培训
//从这⾥获取配置⽂件中 active 的值,根据当前的active值决定是否加载类wsdl
expen>元音辅音String[] activeProfiles = ActiveProfiles();
for (String active : activeProfiles) {
if(active.equals(ActiveEnum.Active().toString())){
return true;
}
}
return fal;
}
floccinaucinihilipilification}
2. 在需要判断条件的bean上,加上**@Conditional(TestExistsCondition.class) **即可在满⾜条件的时候加载对应的类。
@Bean
@Conditional(TestMqExistsCondition.class)动感英语
public TestBean getTestBean(){
TestBean testBean = new TestBean();
return testBean;
bec商务英语}
其他派⽣的的conditional
@ConditionalOnClass
如果此class不存在
@ConditionalOnMissingBean
只有对应的ban在系统中都没有被创建,它修饰的初始化代码块才会执⾏,⽤户⾃⼰⼿动创建的bean优先
@ConditionalOnBean
仅仅在当前上下⽂中存在某个对象时,才会实例化⼀个Bean。745780翻译出来是什么意思
gallop@ConditionalOnClass
某个class位于类路径上,才会实例化⼀个Bean
@ConditionalOnExpression
当表达式为true的时候,才会实例化⼀个Bean。
⽐如:
@ConditionalOnExpression("true")
@ConditionalOnExpression("${abled:fal}")
ccic@ConditionalOnMissingBean
仅仅在当前上下⽂中不存在某个对象时,才会实例化⼀个Bean
@ConditionalOnMissingClass
某个class类路径上不存在的时候,才会实例化⼀个Bean
@ConditionalOnNotWebApplication
不是web应⽤