在上一篇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>[email protected]</value>
<value>[email protected]</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>
輸入結果如下所示: