Java 如何使用@Conditional annotation指定多个条件
我第一次做一个Spring项目,遇到了一个问题 我有一个java类:Java 如何使用@Conditional annotation指定多个条件,java,spring,annotations,Java,Spring,Annotations,我第一次做一个Spring项目,遇到了一个问题 我有一个java类: @Component @Conditional(AppA.class) public class AppDeploy {...} 现在我需要修改如下: @Component @Conditional(AppA.class or AppB.class) public class AppDeploy {...} 有人能帮我怎么做吗? 非常感谢。您可以创建自己的条件注释,该注释允许您提供参数,然后您可以根据提供的参数值应用测试条
@Component
@Conditional(AppA.class)
public class AppDeploy {...}
现在我需要修改如下:
@Component
@Conditional(AppA.class or AppB.class)
public class AppDeploy {...}
有人能帮我怎么做吗?
非常感谢。您可以创建自己的条件注释,该注释允许您提供参数,然后您可以根据提供的参数值应用测试条件:
有关更多详细信息,请参阅本文:这很简单,在发布问题之前应该花一点时间。 我是这样做的 创建了一个新类:
public class AppAOrB implements Condition {
public AppAOrB() {
super();
}
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
Environment env = conditionContext.getEnvironment();
return env.containsProperty("APP_A")||env.containsProperty("APP_B");
}
}
然后像这样使用它:
@Component
@Conditional(AppAOrB.class)
public class AppDeploy {...}
我有一个稍微不同的方法。 从您的代码中,我可以得出结论(也许我错了),您已经实现了条件
AppA.class
和AppB.class
,您想知道如何优雅地实现apparb.class
条件。当您考虑到AppA.class
和AppB.class
只是普通的java类时,实现是显而易见的:
public class AppAOrB implements Condition {
@Override
public boolean matches(@NonNull ConditionContext context, @NonNull AnnotatedTypeMetadata metadata) {
return new AppA().matches(context, metadata) || new AppB().matches(context, metadata);
}
}
这种方法的优点是它放弃了枯燥的规则