spring @Condition 多注解之间执行逻辑与还是或

最近在学习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 $$$$$$$$$$$$$$");
    }

}

查看控制台:
这里写图片描述
看到了预期的输出,最后实验结论:
有多个条件存在,他们之间是逻辑与关系,如有错误,欢迎大家指出交流。

你可能感兴趣的:(spring,Condition,spring,Condition)