spring - constructor-arg 的使用

from http://hi.baidu.com/at87958208/item/dbd64575259291460d0a0724

 Spring使用spring-beans.dtd文件来定义BeanFactory的XML配置规范。可以在http://www.springframework.org/dtd/spring-beans.dtd找到该dtd文件,当然,Spring的下载文件中也已经包含了该dtd文件。它被放在dist文件夹中。
      配置文件的根元素是beans,每个组件使用bean元素来定义,bean元素可以有许多属性,其中有两个是必须的:id和class(这里说的id是必须的并不意味着在配置文件中必须指定id,后面会详细说明)。id表示组件的默认名称,class表示组件的类型。
      如果使用设值注入,则需要使用property子标签,来指定组件的属性。

Java代码  
  1. class="com.apress.prospring.ch2.StandardOutMessageRenderer">   
  2.        
  3.            
  4.        
  5.   
  6.      // 使用构造子注入时,则使用constructor-arg子标签,来指定构造函数的参数。   
  7. class="com.apress.prospring.ch4.ConfigurableMessageProvider">   
  8.        
  9.         This is a configurable message   
  10.        
  11.   
  12.       //当构造函数有多个参数时,可以使用constructor-arg标签的index属性,index属性的值从0开始。   
  13. class="com.apress.prospring.ch4.ConfigurableMessageProvider">   
  14.        
  15.         first parameter   
  16.        
  17.        
  18.         second parameter   
  19.        
  20.   
  21.   
  22.     // 在使用构造子注入时,需要注意的问题是要避免构造子冲突的情况发生。考虑下面的情况:   
  23. public class ConstructorConfusion {   
  24.     public ConstructorConfusion(String someValue) {   
  25.         System.out.println("ConstructorConfusion(String) called");   
  26.     }   
  27.     public ConstructorConfusion(int someValue) {   
  28.         System.out.println("ConstructorConfusion(int) called");   
  29.     }   
  30. }   
  31.     // 使用如下配置文件   
  32. class="com.apress.prospring.ch4.ConstructorConfusion">   
  33.        
  34.         90   
  35.        
  36.   
  37.     // 那么,当实例化组件constructorConfusion时,将输出ConstructorConfusion(String) called,也就是说参数类型为String的构造函数被调用了,这显然不符合我们的要求。为了让Spring调用参数为int的构造函数来实例化组件constructorConfusion,我们需要在配置文件中明确的告诉Spring,需要使用哪个构造函数,这需要使用constructor-arg的type属性。   
  38. class="com.apress.prospring.ch4.ConstructorConfusion">   
  39.        
  40.         90   
  41.        
  42.   
  43.      //我们不仅可以构造单个BeanFactory,而且可以建立有继承关系的多个BeanFactory。只需要将父BeanFactory作为参数传给子BeanFactory的构造函数即可。   
  44. BeanFactory parent =   
  45.     new XmlBeanFactory(new FileSystemResource("./ch4/src/conf/parent.xml"));   
  46. BeanFactory child =   
  47.     new XmlBeanFactory(new FileSystemResource("./ch4/src/conf/beans.xml"), parent);   
  48.      //如果子BeanFactory和父BeanFactory中含有名称相同的Bean,那么在子BeanFactory中使用   
  49. 。   
  50.      为了注入集合属性,Spring提供了list,map,set和props标签,分别对应List,Map,Set和Properties,我们甚至可以嵌套的使用它们(List of Maps of Sets of Lists)。   
  51. class="com.apress.prospring.ch4.CollectionInjection">   
  52.        
  53.            
  54.                
  55.                 Hello World!   
  56.                
  57.                
  58.                    
  59.                 
  60.            
  61.        
  62.        
  63.            
  64.                
  65.                 Rob   
  66.                
  67.                
  68.                 Harrop   
  69.                
  70.            
  71.        
  72.        
  73.            
  74.             Hello World!   
  75.                
  76.            
  77.        
  78.        
  79.            
  80.             Hello World!   
  81.                
  82.             
  83.        
  84.   
  85. /*************************

你可能感兴趣的:(java)