Spring条件注释运算符

时间:2016-11-17 19:58:39

标签: java spring spring-security

我需要为两个配置类设置一个条件来保证spring的安全性。当条件为真时,使用配置A,当条件为假时,使用配置B.

我目前使用两个条件类。它们会产生相反的结果。

我可以在条件注释中使用一些运算符吗?像这样的东西?

@Conditional( value = !MyCondition.class )

2 个答案:

答案 0 :(得分:2)

@Conditional注释接收实现Condition接口的类名,并在匹配条件时创建bean。

如果您尝试实现的条件只是对另一个现有条件的否定,那么您可以从现有条件扩展并覆盖matches方法作为调用父类matches的否定方法

答案 1 :(得分:0)

在Spring中获取 inverse 条件的代码。

   public class MyCondition extends SpringBootCondition {
        public ConditionOutcome getMatchOutcome(ConditionContext context, 
             AnnotatedTypeMetadata metadata) {
          ConditionMessage.Builder message = ConditionMessage.forCondition("MyCondition");

          boolean enable = Binder.get(context.getEnvironment()).bind("execute.enable", 
                Boolean.class).orElse(false);
          if (enable) {
              return ConditionOutcome.match(message.foundExactly("execute enabled"));
          }

          return ConditionOutcome.noMatch(message.notAvailable("execute disable"));
       }
    }

    public class InversedCondition extends MyCondition {

          @Override
          public ConditionOutcome getMatchOutcome(
              ConditionContext context, AnnotatedTypeMetadata metadata) {
            return ConditionOutcome.inverse(super.getMatchOutcome(context, metadata));
          }
    }

有时候,您实际上并不需要InversedCondition。如果将MyCondition用于EnableRun类。然后,您可以对DisalbeRun类使用 @ConditionalOnMissingBean(EnableHello.class)