一、使用構造子注入時,則使用constructor-arg子標籤,來指定構造函數的參數。 java
<bean id="provider" class="com.apress.prospring.ch4.ConfigurableMessageProvider"> spring
<constructor-arg> ide
<value>This is a configurable message</value> 函數
</constructor-arg> spa
</bean> code
二、當構造函數有多個參數時,能夠使用constructor-arg標籤的index屬性,index屬性的值從0開始。 blog
<bean id="provider" class="com.apress.prospring.ch4.ConfigurableMessageProvider"> ci
<constructor-arg index="0"> string
<value>first parameter</value> io
</constructor-arg>
<constructor-arg index="1">
<value>second parameter</value>
</constructor-arg>
</bean>
三、 在使用構造子注入時,須要注意的問題是要避免構造子衝突的狀況發生。考慮下面的狀況:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public
class
ConstructorConfusion {
public
ConstructorConfusion(String someValue) {
System.out.println(
"ConstructorConfusion(String) called"
);
}
public
ConstructorConfusion(
int
someValue) {
System.out.println(
"ConstructorConfusion(int) called"
);
}
}
|
使用以下配置文件
<bean id="constructorConfusion" class="com.apress.prospring.ch4.ConstructorConfusion">
<constructor-arg>
<value>90</value>
</constructor-arg>
</bean>
那 麼,當實例化組件constructorConfusion時,將輸出ConstructorConfusion(String) called,也就是 說參數類型爲String的構造函數被調用了,這顯然不符合咱們的要求。爲了讓Spring調用參數爲int的構造函數來實例化組件 constructorConfusion,咱們須要在配置文件中明確的告訴Spring,須要使用哪一個構造函數,這須要使用constructor- arg的type屬性。
<bean id="constructorConfusion" class="com.apress.prospring.ch4.ConstructorConfusion">
<constructor-arg type="int">
<value>90</value>
</constructor-arg>
</bean>