当前位置: 首页 > 知识库问答 >
问题:

Spring,配置首选bean以在存在多个实例时自动装配

赵辉
2023-03-14

我有一个接口作为bean注入到多个组件中
有三个类实现了这个接口,这导致了spring自动连接bean的模糊性。

我希望有一种灵活的方式(最好通过application.properties或env var)来指定选择哪个bean...

前任

public interface MyComponent{
}
@Component("a")
public class MyComponentA implements MyComponent{
}
@Component("b")
public class MyComponentB implements MyComponent {
}

@Component("c")
public class MyComponentC implements MyComponent{
}

那么系统中的许多类可能会自动连接该组件

@Autowired
MyComponent bean;

我知道我可以使用@Qualifier(“a”)来确定要注入的实现,但问题是,如果我想从“a”更改为“c”,我需要在多个地方更改代码。。。

我想要一种全局的方式来选择在没有限定符时使用哪个 bean

共有1个答案

严修德
2023-03-14

我想您正在寻找的是可以应用于组件的@ConditionalOnProperty注释:

@Component("a")
@ConditionalOnProperty(name = "component", havingValue = "a")
public class MyComponentA implements MyComponent{
}

@Component("b")
@ConditionalOnProperty(name = "component", havingValue = "b")
public class MyComponentB implements MyComponent {
}

@Component("c")
@ConditionalOnProperty(name = "component", havingValue = "c")
public class MyComponentC implements MyComponent{
}

有关此解决方案的更多信息,请参阅https://www.baeldung.com/spring-conditionalonproperty。

你可以在这里探索更多关于Spring中的条件注释的信息:https://www.baeldung.com/spring-conditional-annotations

 类似资料:
  • 问题内容: 是否可以在用Java编写的Spring配置中使用Spring的注释? 例如: 显然,不能直接实例化DataSource接口,但是为了简化起见,我在这里直接实例化了它。当前,当我尝试上述操作时,数据源对象仍然为null,并且Spring不会对其进行自动接线。 我通过返回一个Hibernate 对象成功地工作了。 所以我的问题特别是:是否有办法针对a ?或更笼统地说,在Spring Jav

  • 本文向大家介绍当 bean 存在的时候怎么置后执行自动配置?相关面试题,主要包含被问及当 bean 存在的时候怎么置后执行自动配置?时的应答技巧和注意事项,需要的朋友参考一下 为了当 bean 已存在的时候通知自动配置类置后执行,我们可以使用 @ConditionalOnMissingBean 注解。这个注解中最值得注意的属性是: value:被检查的 beans 的类型 name:被检查的 be

  • 本文向大家介绍Spring自动装配Bean实现过程详解,包括了Spring自动装配Bean实现过程详解的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Spring自动装配Bean实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 要使用自动装配,就需要配置 <bean> 元素的 autowire 属性。autowire 属性有

  • 问题内容: 我正在尝试在Spring中制作我的第一个bean,但是在加载上下文时遇到了问题。我在src / main / resources中有一个bean的配置XML文件。 我收到以下IOException: `Exception in thread “main” org.springframework.beans.factory.BeanDefinitionStoreException: IO

  • 问题内容: 我正在阅读Pro Spring3这本书。它有一段确实让我感到困惑。该段是关于春季自动装配的。这是节选: 在大多数情况下,是否应该使用自动装配的问题的答案肯定是“不!”。自动装配可以在小型应用程序中节省时间,但在许多情况下,这会导致不良做法,并且在大型应用程序中不灵活。使用byName似乎是个好主意,但它可能会导致您为类提供人为的属性名称,以便可以利用自动装配功能。Spring的整个想法

  • 我正在使用SpringFramework和Java。我使用SpringXML文件来定义体系结构的流程,以及Java部分将使用的bean。 我的xml文件中有两个相同类的bean,但它们的构造函数参数不同: 是否有一种方法可以将其中一个bean设置为默认值,以便从Java@Autow的它?并且,当我想使用非默认bean时,应用注释。

  • 问题内容: 我在结合JavaFX和Spring时遇到问题。我有一个简单的JavaFX应用程序,它运行良好。现在,我正在尝试向其中添加一些Spring。我在Spring教程中跟随JavaFX 2。我的代码: 是具有main的文件: : : 我的SpringFxmlLoader在教程中看起来与此类似: 我的SpringApplicationConfig: 在我的应用程序中,我具有绑定控制器: 当我运行

  • 本文向大家介绍Spring装配bean方法实例总结,包括了Spring装配bean方法实例总结的使用技巧和注意事项,需要的朋友参考一下 一 前言 在XML中进行显式配置。 在Java中进行显式配置。 隐式的bean发现机制和自动装配 关于xml配置不会在本篇说明,有兴趣的读者可以自行了解学习; 二 自动装配bean 自动装配Bean主要通过如下两个方式实现自动装备bean 组件扫描(compone