我首先提供了小代碼片段,然後我會要求解釋。請解釋我通過構造函數在Spring中自動裝配的這種(模糊性)行爲
public class A {
private String msg;
private B b;
public A() {
System.out.println("No argument constructor is called");
}
public A (B b) {
System.out.println("Parameterized constructor is called");
this.b = b;
}
// getters and setters
}
=========================================== ===
<bean id="a" class="A" p:msg="hello" autowire="constructor"/>
<bean id="b" class="B"/>
======================================== ======
OUTPUT:
參數的構造函數被調用
這是正常行爲&理解
===================================== =========
現在,我添加了一個新的類B的bean定義,如下所示。
<bean id="a" class="A" p:msg="hello" autowire="constructor"/>
<bean id="b" class="B"/>
<bean id="c" class="B"/>
所以,就我知道的,因爲通過構造函數自動裝配在內部使用「byType的」,因此它會給關於豆唯一性衝突的例外,如出現這種情況,如果我會用自動裝配=「byType的」 。
但奇怪的是,輸出如下。
OUTPUT:
無參數的構造函數被調用
=========================== =============
但是,請注意,如果在類A中沒有指定默認構造函數,則會發生期望的異常。那麼,它是Spring IoC容器的默認行爲嗎?如果是的話,請詳細解釋一下。
預先感謝您。
的問題是,也可以在LinkedIn(Spring autowiring through constructor ambiguity)
謝謝你的回答。我可以很容易地理解這種行爲,但對其原因感到困惑。 – Pushan