[英]conflicting beans while autowiring even though the bean type is enforced
我有兩個類的豆com.abc.MyClass
和com.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.