我有一个应用程序有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]
答案 0 :(得分:19)
你必须给你的bean提供不同的名字 - 如果用同一个名字定义多个bean,那么后面定义的bean将覆盖之前定义的那个 - 所以在你的情况下只有一个bean存在,其名称为{{ 1}}。
您可以为这两个bean提供不同的名称,这样两者都可以存在,您可以使用以下方法注入正确的名称:
dataTransferHandler
要么
@AutoWired @Qualifier("dataTransferHandler")
答案 1 :(得分:2)
您可以将属性 primary =“true”赋予您想要在自动装配时具有首选项的bean定义。但bean名称必须不同。相同的bean名称没有解决方案。
在运行时,当您获得自动装配的类时,主真实bean将获得自动装配的首选项。希望这对你有所帮助。欢呼声。
答案 2 :(得分:0)
我问了关于同一问题的另一个问题,并且有一个解决方案不需要使用@Qualifier批注:如果两个DataTransferHandler类都具有@Component批注,则只需将String参数添加到其中一个即可。它们的构造(即@Component(“ Foo”)),这样就可以解决问题,而无需进行其他更改。
有关更多详细信息,请参见User9123's answer on my question。