我是Spring的新手,希望得到您的一切幫助。我遇到了「期望單匹配bean但發現兩個」異常。我已經搜索瞭解決方案,並認爲已經理解了解決方案。大多數解決方案都建議使用@Qualifier來解決此異常。但我認爲這不會解決我的問題。下面是我的類層次結構:Spring @Autowire繼承
abstract class A{
@Autowired
Client client;
protected void doSomething(){
/* ....some code .... */
client.someStuff();
/* ....some code .... */
}
/* ..... few abstract methods ......... */
}
class B extends A{
public void action(){ doSomething() }
}
class C extends A{
public void action(){ doSomething() }
}
我的.xml文件confirugration是
<bean id="authClientA" class="com.xyz.Client">
<property name="auth" value="abc">
</bean>
<bean id="authClientB" class="com.xyz.Client">
<property name="auth" value="xyz">
</bean>
<bean id="beanA" class="ClassA">
<property name="client" ref="authClientA">
</bean>
<bean id="beanB" class="ClassB">
<property name="auth" ref="authClientB">
</bean>
所以基本上,我有有,這將是兩者共同的子類中的方法的抽象類。此方法使用客戶端引用,但在運行時將使用不同的對象。 doSomething()
在子類中不被覆蓋。
所以當我嘗試運行這段代碼時,它給了我客戶端引用的例外。我不認爲我可以使用@Qualifier,因爲@Qualifier需要將.xml中的bean名稱指定爲參數,但由於'client'屬性很常見,所以我不能只使用一個bean名稱。
有人可以幫助解釋是否有辦法解決。複製doSomething()
方法會破壞繼承的整個目的,並會導致跨類的代碼重複。我不能在子類中擁有client
屬性,因爲它在編譯時將變爲doSomething()
方法。
任何想法/建議/解決方案將有所幫助。
感謝提前:)
如果你對這些bean使用XML配置,爲什麼即使使用'@ Autowired'?只需直接指定「屬性」即可。 –