我需要为两个配置类设置一个条件来保证spring的安全性。当条件为真时,使用配置A,当条件为假时,使用配置B.
我目前使用两个条件类。它们会产生相反的结果。
我可以在条件注释中使用一些运算符吗?像这样的东西?
@Conditional( value = !MyCondition.class )
答案 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)。