作用
根据条件,决定类是否加载到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 = context.getEnvironment();
//从这里获取配置文件中active的值,根据当前的active值决定是否加载类
String[] activeProfiles - environment.getActiveProfiles();
for(String active : activeProfiles) {
if(active.equals(ActiveEnum.open_active.getActive().toString())){
return true;
}
}
return false;
}
}
2.在需要判断条件的bean上,加上@Conditional(TestExistCondition.class)即可在满足条件的时候加载对应的类。
@Bean
@Conditional(TestMqExistsCondition.class)
public TestBean getTestBean(){
TestBean testBean = new TestBean();
return testBean;
}
其他派生的condition
@ConditionalOnClass
如果此class不存在
@ConditionalOnMissingBean
只有对应的bean在系统中都没有被创建,它修饰的初始化代码才会执行,用户自己手动创建的bean优先。