16

我有一个应用程序,它有 2 个同名的 bean,但它们位于不同的包中。我的 Spring 应用程序失败,因为它无法决定采用哪个 bean。有什么解决办法吗?bean 当前不实现特定的接口。

请参阅下面的异常编辑示例:

Caused by:
org.springframework.context.annotation.ConflictingBeanDefinitionException:
Annotation-specified bean name 'dataTransferHandler' for bean class
[aaaaa.ws.handler.DataTransferHandler] conflicts with existing,
non-compatible bean definition of same name and class
[bbbbb.ws.handler.DataTransferHandler]
4

3 回答 3

21

您将不得不为您的 bean 提供不同的名称 - 如果多个 bean 使用相同的名称定义,那么稍后定义的一个将覆盖之前定义的一个 - 因此在您的情况下,只有一个名称为dataTransferHandler.

您可以为这两个 bean 指定不同的名称,以便两者都可以存在,并且您可以使用以下方法注入正确的一个: @AutoWired @Qualifier("dataTransferHandler")@Resource(name="dataTransferHandler")

于 2012-06-13T12:58:10.767 回答
2

您可以将属性primary="true"赋予您希望在自动装配时具有偏好的 bean 定义。但是bean名称必须不同。相同的bean名称没有解决方案。

在运行时,当您将获得自动装配类时,主真正的 bean 将获得自动装配的偏好。希望这对您有所帮助。干杯。

于 2012-06-13T12:59:07.777 回答
0

我问了关于同一问题的另一个问题,并且有一个不需要使用 @Qualifier 注释的解决方案:如果您的两个 DataTransferHandler 类都有一个 @Component 注释,您可以简单地将 String 参数添加到它们的一个构造中(即@Component(“Foo”)),这应该可以解决问题而无需额外的更改。

有关更多详细信息,请参阅User9123 对我的问题的回答。

于 2020-03-04T07:19:19.310 回答