我是第一次做一个Spring项目而且遇到了问题。
我有一个java类:
@Component
@Conditional(AppA.class)
public class AppDeploy {...}
现在我需要修改它:
@Component
@Conditional(AppA.class or AppB.class)
public class AppDeploy {...}
有人可以帮我解决这个问题吗? 感谢您的期待。
答案 0 :(得分:1)
您可以创建自己的条件注释,使您可以提供参数,然后根据提供的参数值应用测试条件:
有关详细信息,请参阅此帖子:http://www.javacodegeeks.com/2013/10/spring-4-conditional.html
答案 1 :(得分:0)
这很简单,在发布问题之前应该花一点时间。 我就是这样做的。
创建了一个新类:
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 {...}
答案 2 :(得分:0)
我的方法略有不同。
从您的代码中,我可以得出结论(也许我错了),您已经实现了条件AppA.class
和AppB.class
,并且您想知道如何以一种优雅的方式实现AppAOrB.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);
}
}
这种方法的优点是它没有DRY规则。