ConditionalOnMissingBean

ConditionalOnMissingBean

我有3个实现相同接口的bean。但是我只想实例化它们中的一个,如果A可用,那么A,如果没有A,那么B,如果没有A和B,那么C。
当我只有两个时,这很简单,默认情况下,其中一个带有“ @ConditionalOnMissingBean”注释。但不确定是否可以与其中3个一起使用。
是否可以通过注释解决此问题?
我不想创建工厂方法,因为我有多个使用这些组件的应用程序,而且我没有能力更改其中一些组件

最佳答案

是的,使用@ConditionalOnMissingBean annotation,应设置如下代码:

@Configuration
public class ConditionalOnMissingBeanConfig {

    @Bean
    public A beanA(){
        return new A(); // will initialize as normal
    }

    @Bean
    @ConditionalOnMissingBean(name="beanA")
    public B beanB(){
        return new B(); // it will not initialize as
                        // beanA is present in the beanFactory.
    }

    @Bean
    @ConditionalOnMissingBean(name="beanB")
    public C beanC(){
        return new C(); // will get initialized as there is no
                        // bean with name beanB in BeanFactory.
    }

}


仅当beanfactory中缺少指定的bean时才匹配的条件。仅当应用程序上下文处理bean定义时,这才匹配,因此建议仅由自动配置类使用。

09-26 12:45