在上一篇Spring系列—基础篇之方法注入中讲解了如何通过方法注解的方法实现一个单例模式的实例中组合调用多例模式的实例。本篇将讲解一下在开发中经常使用的的集合的实现方法。
在Spring中通过<list/>、<set/>、<map/>和<props/>可以设置属性或者参数为Java集合类型 List、Set、Map和Properties类,如下所示:
package org.spring.stud.po;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
/**
*
* Spring 集合类配置类
*
*/
public class CollectionPojo {
private List<String> list;
private Set<String> set;
private Map<String, String> map;
private Properties properties;
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public Set<String> getSet() {
return set;
}
public void setSet(Set<String> set) {
this.set = set;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
}
在Spring中的XML配置文件的配置方式如下所示:
<bean id="collectionPojo" class="org.spring.stud.po.CollectionPojo">
<property name="list">
<list>
<value>张三</value>
<value>李四</value>
<idref bean="idRefPojo" />
</list>
</property>
<property name="map">
<map>
<entry key="name" value="张三" />
<entry key="age" value="20"/>
</map>
</property>
<property name="set">
<set>
<value>abc@163.com</value>
<value>eda@163.com</value>
</set>
</property>
<property name="properties">
<props>
<prop key="username">root</prop>
<prop key="password">1qaz@SX</prop>
</props>
</property>
</bean>
在Map、Set等的值的类型可以是如下元素
bean | ref | idref | list | set | map | props | value | null
1、集合合并
Spring容器也支持集合合并操作,在应用开发者和先定义一个父的<list/>、<map/>、<set/>和<props>的元素,然后在定义子类型 的<list/>、<map/>、<set/>和<props>的元素,在子元素中覆盖父类中的值,子类中返回的值就是父类和子类中组合后的数据。
如在Spring中如下配置一个子类。
<bean id="child" parent="collectionPojo">
<property name="list">
<list>
<value>王五</value>
</list>
</property>
</bean>
如上所示的配置中,子类中的list将会覆盖父类中的信息,打印结果如下所示:
在 <list /> 元素中添加一个 merge="true" 属性,则子类中的值将会和父类中的值合并输入。如下所示:
<bean id="child" parent="collectionPojo">
<property name="list">
<list merge="true">
<value>王五</value>
</list>
</property>
</bean>
输入结果如下所示: