通过<list/>,<set/>,<map/>以及<props/>元素定义和设置与java collection类型对应的List,Set,Map,Rproperties的值。
2 import java.util.List;
3 import java.util.Map;
4 import java.util.Properties;
5 import java.util.Set;
6
7 import org.springframework.beans.factory.BeanFactory;
8 import org.springframework.beans.factory.xml.XmlBeanFactory;
9 import org.springframework.core.io.FileSystemResource;
10
11 public class CollectionInjection {
12
13 private Map map;
14
15 private Properties props;
16
17 private Set set;
18
19 private List list;
20
21 public static void main(String[] args) {
22 BeanFactory factory = new XmlBeanFactory(new FileSystemResource(
23 "src/applicationContext.xml"));
24
25 CollectionInjection instance = (CollectionInjection)
factory.getBean("injectCollection");
26 instance.displayInfo();
27 }
28
29 public void setList(List list) {
30 this.list = list;
31 }
32
33 public void setSet(Set set) {
34 this.set = set;
35 }
36
37 public void setMap(Map map) {
38 this.map = map;
39 }
40
41 public void setProps(Properties props) {
42 this.props = props;
43 }
44
45 public void displayInfo() {
46
47 // display the Map
48 Iterator i = map.keySet().iterator();
49
50 System.out.println("Map contents:/n");
51 while (i.hasNext()) {
52 Object key = i.next();
53 System.out.println("Key: " + key + " - Value: " + map.get(key));
54 }
55
56 // display the properties
57 i = props.keySet().iterator();
58 System.out.println("/nProperties contents:/n");
59 while (i.hasNext()) {
60 String key = i.next().toString();
61 System.out.println("Key: " + key + " - Value: "
62 + props.getProperty(key));
63 }
64
65 // display the set
66 i = set.iterator();
67 System.out.println("/nSet contents:/n");
68 while (i.hasNext()) {
69 System.out.println("Value: " + i.next());
70 }
71
72 // display the list
73 i = list.iterator();
74 System.out.println("/nList contents:/n");
75 while (i.hasNext()) {
76 System.out.println("Value: " + i.next());
77 }
78 }
79 }
2 public String toString()
3 {
4 return "refBean";
5 }
6 }
2 <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
3 <beans>
4
5 <!-- oracle bean used for a few examples -->
6 <bean id="refBean" name="refB" class="RefBean"/>
7
8 <!-- collection injection samples -->
9 <bean id="injectCollection" class="CollectionInjection">
10 <property name="map">
11 <map>
12 <entry key="nameValue">
13 <value>gzhb_improviser</value>
14 </entry>
15 <entry key="refBeanValue">
16 <ref local="refBean"/>
17 </entry>
18 </map>
19 </property>
20 <property name="props">
21 <props>
22 <prop key="firstName"> gzhb </prop>
23 <prop key="secondName"> improviser </prop>
24 </props>
25 </property>
26 <property name="set">
27 <set>
28 <value>gzhb</value>
29 <ref local="refBean"/>
30 </set>
31 </property>
32 <property name="list">
33 <list>
34 <value>improviser</value>
35 <ref local="refBean"/>
36 </list>
37 </property>
38 </bean>
39 </beans
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
public class CollectionInjection {
private Map map;
private Properties props;
private Set set;
private List list;
public static void main(String[] args) {
BeanFactory factory = new XmlBeanFactory( new FileSystemResource(
" src/applicationContext.xml " ));
CollectionInjection instance = (CollectionInjection) factory.getBean( " injectCollection " );
instance.displayInfo();
}
public void setList(List list) {
this .list = list;
}
public void setSet(Set set) {
this .set = set;
}
public void setMap(Map map) {
this .map = map;
}
public void setProps(Properties props) {
this .props = props;
}
public void displayInfo() {
// display the Map
Iterator i = map.keySet().iterator();
System.out.println( " Map contents:/n " );
while (i.hasNext()) {
Object key = i.next();
System.out.println( " Key: " + key + " - Value: " + map.get(key));
}
// display the properties
i = props.keySet().iterator();
System.out.println( " /nProperties contents:/n " );
while (i.hasNext()) {
String key = i.next().toString();
System.out.println( " Key: " + key + " - Value: "
+ props.getProperty(key));
}
// display the set
i = set.iterator();
System.out.println( " /nSet contents:/n " );
while (i.hasNext()) {
System.out.println( " Value: " + i.next());
}
// display the list
i = list.iterator();
System.out.println( " /nList contents:/n " );
while (i.hasNext()) {
System.out.println( " Value: " + i.next());
}
}
}
运行结果:
Map contents:
Key: nameValue - Value: gzhb_improviser
Key: refBeanValue - Value: refBean
Properties contents:
Key: secondName - Value: improviser
Key: firstName - Value: gzhb
Set contents:
Value: gzhb
Value: refBean
List contents:
Value: improviser
Value: refBean
注意:map的key或value值,或set的value值不能一下元素:
bean,ref,idref,list,set,map,props,vaues,null
集合合并
Spring2.0支持集合合并,子类Bean实例可以合并和重写抽象父类Bean实例的集合属性。
2. <bean id="parent" abstract="true" class="example.ComplexObject">
3. <property name="pro">
4. <props>
5. <prop key="pro1">pro1</prop>
6. <prop key="pro3">pro3</prop>
7. </props>
8. </property>
9. </bean>
10. <bean id="child" parent="parent">
11. <property name="pro">
12. <!-- the merge is specified on the *child* collection definition -->
13. <props merge="true">
14. <prop key="pro2">pro2</prop>
15. <prop key="pro3">pro3</prop>
16. </props>
17. </property>
18. </bean>
19. <beans>
通过合并,子bean的pro3值覆盖父bean的值,不同集合类型不能合并,子bean中的merge必须定义,否则出现异常。