java - Bean 创建回退的最佳实践是什么?

标签 java spring

我有 3 个实现相同接口(interface)的 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 定义由应用程序上下文处理时才会匹配,因此建议仅由自动配置类使用。

关于java - Bean 创建回退的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59664982/

相关文章:

java - Maven ClassNotFoundException SpringServletContainerInitializer

java - 在几秒钟内没有响应后,如何停止主线程中通过 TaskExecutor 运行的线程?

java - 如何阻止其他 JUnit 测试窃取我的 Spring Root Controller ?

java - 如何使用Spring Boot为传记后端制作实体类和 Controller ?

java - Hibernate SQL 语法错误生成的查询

java - 我可以在不同的 Spring Controller 中使用不同参数的相同映射值吗?

java - 如何编写用于重试调用 Java webservice 的 java 客户端代码

java - 谷歌 Protobuf 和 Jmock

java - Spring MVC;避免 url 中的文件扩展名?

java - 基于谁是被调用者的逻辑