java 条件语句:必须满足其中一项要求,而不是全部要求

7gcisfzg  于 2023-09-29  发布在  Java
关注(0)|答案(1)|浏览(97)

我有一个类,它也是一个Spring组件。

@Component
public class ComponentClass {
    // code
}

我希望它只在某些条件下被创造出来。例如,必须满足以下条件中的至少一个

  • BeanA必须存在
  • BeanB必须存在
  • 必须设置配置文件foo

例如,@ConditionalOnBean({BeanA.class, BeanB.class})不做我想要的,因为它意味着这两个bean必须存在。

lp0sw83n

lp0sw83n1#

根据@lealceldeiro,@Rob Spoor和@Solar Mike在帖子评论中的建议,基于OR(而不是AND)条件的自定义注解是正确的解决方案。
我的解决方案是扩展AnyNestedCondition的类:

public class ConditionalOnMyTerms extends AnyNestedCondition {

    ConditionalOnMyTerms() {
        super(ConfigurationPhase.REGISTER_BEAN);
    }

    @ConditionalOnBean(com.example.BeanA.class)
    static class BeanA {}

    @ConditionalOnBean(com.example.BeanB.class)
    static class BeanB {}

    @Profile("foo")
    static class fooProfile {}
}

相关问题