簡體   English   中英

即使強制使用了bean類型,在自動裝配時也會發生沖突的bean

[英]conflicting beans while autowiring even though the bean type is enforced

我有兩個類的豆com.abc.MyClasscom.xyz.MyClass

我在不同的課程中都使用了它們-

@Component
public class Class1{
  @Autowired
  private com.abc.MyClass myClass;
  ...
}

@Component
public class Class2{
  @Autowired
  private com.xyz.MyClass myClass;
  ...
}

它提供ConflictingBeanDefinitionException,因為bean名稱是相同的“ myClass”,這是預期的。 我的疑問是,我該怎么解決才能按類型注入bean。 我嘗試使用Resource並強制使用類型-

@Resource(type=com.xyz.MyClass)
private com.xyz.MyClass myClass; 

但這也不起作用。 仍然給出ConflictingBeanDefinitionException

您可以使用@Qualifier(“ beanName”)注釋通過指定要映射的確切bean名稱來解決沖突

經驗法則永遠不要依賴自動生成的名稱。 默認情況下,bean名稱將是大寫的非限定類名。 就你而言

class 1 -> com.abc.MyClass
class 2 -> com.xyz.MyClass

非合格的類名相同(MyClass),因此在春季上下文中

class 1 -> myClass
class 2 -> myClass

由於這些值必須是唯一的,因此不會發生上述情況,因此您會遇到ConflictingBeanDefinitionException

如所指出的, @Component("name")是解決您的問題的方法。 如果要檢查自動生成的名稱,則您的bean可以實現BeanNameAware接口,該接口是容器回調,它將bean名稱傳遞給您的bean。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM