spring - constructor-arg的常規用法

 一、使用構造子注入時,則使用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>  

相關文章
相關標籤/搜索