最近在学习spring 源码,看到条件注解,有个疑问,就是在我使用多个条件注解时,他们之间是逻辑与还是或的关系,为此,做了个小实验。
首先自定义两个condition 的实现
/**
* Created by daifei on 2017/8/10.
*/
public class MyConditionA implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return false;
}
}
/**
* Created by daifei on 2017/8/10.
*/
public class MyConditionB implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return true;
}
}
MyConditionA 返回false,MyConditionA 返回 true。
测试代码如下:
package com.ethan.config;
import com.ethan.bean.StringValueFilter;
import com.ethan.config.condition.MyConditionA;
import com.ethan.config.condition.MyConditionB;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
/**
* Created by daifei on 2017/8/10.
*/
@ConditionalOnBean(StringValueFilter.class) // 这个类已近申明为bean
@Conditional(MyConditionA.class)
@Configuration
public class ConditionAnnotationConfig {
public ConditionAnnotationConfig(){
System.out.println("ConditionAnnotationConfig is init $$$$$$$$$$$$$$");
}
}
执行之后返现没有初始化的输出,再用 MyConditionB(返回true) 测试
@ConditionalOnBean(StringValueFilter.class) // 这个类已近申明为bean
@Conditional(MyConditionB.class) //返回true
@Configuration
public class ConditionAnnotationConfig {
public ConditionAnnotationConfig(){
System.out.println("ConditionAnnotationConfig is init $$$$$$$$$$$$$$");
}
}
查看控制台:
看到了预期的输出,最后实验结论:
有多个条件存在,他们之间是逻辑与关系,如有错误,欢迎大家指出交流。