1、使用構造子注入時,則使用constructor-arg子標簽,來指定構造函數的參數。
<bean id="provider" class="com.apress.prospring.ch4.ConfigurableMessageProvider">
<constructor-arg>
<value>This is a configurable message</value>
</constructor-arg>
</bean>
2、當構造函數有多個參數時,可以使用constructor-arg標簽的index屬性,index屬性的值從0開始。
<bean id="provider" class="com.apress.prospring.ch4.ConfigurableMessageProvider">
<constructor-arg index="0">
<value>first parameter</value>
</constructor-arg>
<constructor-arg index="1">
<value>second parameter</value>
</constructor-arg>
</bean>
3、 在使用構造子注入時,需要注意的問題是要避免構造子沖突的情況發生。考慮下面的情況:
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>