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、 在使用構造子注入時,需要注意的問題是要避免構造子沖突的情況發生。考慮下面的情況:
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>
注:我深知知識就是熟練與記憶的過程,願與你們一同分享。