2013-11-09 39 views
1

我有課的兩個bean自動裝配 - com.abc.MyClasscom.xyz.MyClass衝突的豆,而即使Bean類型是強制執行

,我在不同的類中使用他們兩個 -

@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

+0

你使用註解還是xml? –

+0

我正在使用註釋。 – Kevindra

回答

0

你可以使用@Qualifier(「beanName」)標註由specfying確切的bean名字解決衝突要映射

0

拇指從不依靠自動生成的名稱的規則。默認情況下,bean名稱將是非資本化的非限定類名稱。在你的情況

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

非限定類名是相同的(MyClass的),所以在Spring上下文會有

class 1 -> myClass 
class 2 -> myClass 
因爲這些值必須是唯一的,因此你得到

以上不會發生ConflictingBeanDefinitionException

正如指出@Component("name")是解決您的問題。 如果你想檢查自動生成的名字,你的bean可以實現BeanNameAware接口,這是一個容器回調,它將bean名稱傳遞給你的bean。