Spring各类集合注入
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring各类集合注入相关的知识,希望对你有一定的参考价值。
参考技术A 原文: Spring各类集合注入摘要: 我们常在Spring的Bean中注入各种基本类型的值和对象引用,如果需要注入List,Map,Set和数组等集合类型时,又该如何配置呢?
先定义一个测试类,由于本文将要介绍注入各种集合时如何配置,故这个类包含各种集合,类名和属性名不好取,没有特殊含义:
public class Test private List<String> listTest; private Map<String, Object> 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>ListA</value>
<value>ListB</value>
<value>ListC</value>
</list>
</property>
</bean>`
由于集合元素有可以是基本类型值、引用容器中其他Bean、嵌套Bean或集合属性等,因此<list>、<set>、和<key>元素又可以接受如下的子元素:
<props>元素适用于配置Properties类型的属性,Properties类型时一种特殊的类型,其key和value都只能是字符串,故Spring配置Properties类型的属性都比较简单:每个属性项只要分别给出属性名和属性值就足够了。
当使用<map>元素配置Map类型属性时稍显复杂,因为Map类型的元素由多个<entry>组成,每个<entry>又需要配置key和value两个属性。其中<entry>属性支持以下几个属性:
<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.com</props> <prop key="google">www.google.com.hk</prop> <props> </property> </bean>
<bean id="child" parent="parent"> <property name="websites"> <props merge="true"> <prop key="google">www.google.com</prop> <prop key="tencent">www.qq.com</prop> <props> </property> </bean>
通过上面的配置后,child中的属性将变为:
baidu=www.baidu.com google=www.google.com tencent=www.qq.com
以上是关于Spring各类集合注入的主要内容,如果未能解决你的问题,请参考以下文章
Day604.@Value注入问题&集合类型注入问题 -Spring编程常见错误