首页 电脑 电脑学堂 查看内容

Spring高级应用之注入各类集合

2016-7-28 13:55 1073 0

摘要: 先定义一个测试类,由于本文将要介绍注入各种集合时如何配置,故这个类包含各种集合,类名和属性名不好取,没有特殊含义: public class Test { private ListString listTest; private MapString, Object mapTest; p ...

先定义一个测试类,由于本文将要介绍注入各种集合时如何配置,故这个类包含各种集合,类名和属性名不好取,没有特殊含义:

public class Test {
    private List listTest;
    private Map mapTest;
    private Set setTest;
    private String[] arrayTest;
    private Properties propertiesTest;
    //下面是各个属性的setter,此处省略
    //......
}

Test类中,分别定义了List,Map,Set,Array等5种集合类型的属性,下面在Spring配置文件中,分别为这些类型的属性注入值:

<bean id="test" class="com.abc.Test">
    
    <property name="listTest">
        
        <list>
            
            <value>ListAvalue>
            <value>ListBvalue>
            <value>ListCvalue>
        list>
    property>

    
    <property name="mapTest">
        
        <map>
            
            <entry key="key1" value="value1" />
            
            <entry key="key2" value-ref="object" />
        map>
    property>

    
    <property name="setTest">
        
        <set>
            
            <value>SetAvalue>
            
            <bean class="com.abc.OtherBean1" />
            
            <ref local="com.abc.OtherBean2" />
        set>
    property>

    
    <property name="propertiesTest">
        <props>
            
            <prop key="prop1">value1prop>
            <prop key="prop2">value2prop>
        props>
    property>

    
    <property name="arrayTest">
        
        <list>
            
            <value>Array1value>
            <bean class="com.abc.OtherBean1" />
            <ref local="com.abc.OtherBean2" />
        list>
    property>
bean>

由于集合元素有可以是基本类型值、引用容器中其他Bean、嵌套Bean或集合属性等,因此、和元素又可以接受如下的子元素:

  • value:指定集合元素是基本数据类型值或字符串类型值
  • ref:指定集合元素是容器中另一个Bean实例
  • bean:指定集合元素是一个嵌套Bean
  • list、set、map及props:指定集合元素值又是集合

元素适用于配置Properties类型的属性,Properties类型时一种特殊的类型,其key和value都只能是字符串,故Spring配置Properties类型的属性都比较简单:每个属性项只要分别给出属性名和属性值就足够了。

当使用元素配置Map类型属性时稍显复杂,因为Map类型的元素由多个组成,每个又需要配置key和value两个属性。其中属性支持以下几个属性:

  • key:当key是基本类型或字符串时使用
  • key-ref:当key类型是容器中定义的另一个Bean时使用
  • value:当value是基本类型或字符串时使用
  • value-ref:当value是容器中定义的另一个Bean时使用

Spring还提供了一个简化语法来支持Properties形参的setter方法,例如我们可以使用如下配置片段来配置Properties类型的属性:

<property name="propertiesTest">
    <value>
        key1=value1
        key2=value2
    value>
property>

虽然这种配置方式更简单,但是它也有一个缺点:属性名、属性值都只能是英文或数字,不能包含中文字符

从Spring2开始,Spring IoC容器支持集合的合并:子Bean中的集合属性可以从其父Bean的集合属性继承而来,同时,子Bean中的属性会覆盖父Bean中属性名相同的值。 也就是说,子Bean的集合属性的最终值是父Bean、子Bean合并后的最终结果,下面是一个示例:


<bean id="parent" abstract="true" class="com.abc.Parent">
    
    <property name="websites">
        <props>
            <prop key="baidu">www.baidu.comprops>
            <prop key="google">www.google.com.hkprop>
        <props>
    property>
bean>
<bean id="child" parent="parent">
    <property name="websites">
        
        <props merge="true">
            <prop key="google">www.google.comprop>
            <prop key="tencent">www.qq.comprop>
        <props>
    property>    
bean>

通过上面的配置后,child中的属性将变为:

baidu=www.baidu.com
google=www.google.com
tencent=www.qq.com
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过
1

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (1 人)

  • 雷人

    匿名

最新评论

返回顶部