Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用@Conditional annotation指定多个条件_Java_Spring_Annotations - Fatal编程技术网

Java 如何使用@Conditional annotation指定多个条件

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 {...} 有人能帮我怎么做吗? 非常感谢。您可以创建自己的条件注释,该注释允许您提供参数,然后您可以根据提供的参数值应用测试条

我第一次做一个Spring项目,遇到了一个问题

我有一个java类:

@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);
    }
}
这种方法的优点是它放弃了枯燥的规则