Conditional 注解
一、作用
定义某个条件,只有当条件满足时配置才起作用
二、自定义条件
public class MyConditional implements Condition {
@Override
public boolean matches(ConditionContext context,AnnotatedTypeMetadata metadata) {
if(xxx条件) {
return true;
}
return false;
}
}
在需要条件的地方例如 Service 中
@Conditional(MyConditional.class)
@Service
public class Service {
public void do() {
//do something
}
}
这时,若 “xxx条件”没有满足,则 Service 不会作为一个 Bean 被创建和注册。可以定义多个 Condition ,使用 @Conditional(xxx.class,xxx2.class) ,同时返回 ture 才会进行 Bean 的注册和创建,判断从前往后按顺序执行。
三、 自动化配置中的条件化注解
条件化注解 | 配置生效条件 |
---|---|
@ConditionalOnBean | 配置类某个特定的 Bean |
@ConditionalOnMissingBean | 没有配置特定的 Bean |
@ConditionalOnClass | Classpath 里有指定的类 |
@ConditionalOnMissingClass | Classpath 里没有指定的类 |
@ConditionalOnExpression | 给定的 Spring Expression Language(SpEL) 表达式计算结果为true |
@ConditionalOnJava | Java 的版本匹配特定值或一个范围值 |
@ConditionalOnJndi | 参数中给定的 JNDI 位置必须存在一个,如果没有给参数,则要有 JNDI InitialContext |
@ConditionalOnProperty | 指定的配置属性要有一个明确的值 |
@ConditionalOnResource | Classpath 里有指定的资源 |
@ConditionalOnWebApplication | 这是一个 Web 应用程序 |
tionalOnWebApplication | 这是一个 Web 应用程序 |
@ConditionalOnNotWebApplication | 这不是一个 Web 应用程序 |