注入集合
你已经看到如何使用value属性来配置基本数据类型和在你的bean配置文件中使用<property>标签的ref属性来配置对象引用。
现在如果想传递多个值,如Java Collection类型的List,Set,Map和Properties,应该怎么做呢?为了处理这种情况,Spring提供了四中类型的集合的配置元素,如下所示:
- <list> 注入一列值,允许重复
- <set> 有助于连线一组值,但不能重复
- <map> 可以用来注入名称-值对的集合,其中名称和值可以是任何类型
- <props> 可以用来注入名称-值对的集合,其中名称和值都是字符串类型
JavaCollection.java文件的内容:
package com.tuorialsponit; import java.util.List; import java.util.Set; import java.util.Map; import java.util.Properties; public class JavaCollection { private List addressList; private Set addressSet; private Map addressMap; private Properties addressProp; public List getAddressList() { return addressList; } public void setAddressList(List addressList) { this.addressList = addressList; } public Set getAddressSet() { return addressSet; } public void setAddressSet(Set addressSet) { this.addressSet = addressSet; } public Map getAddressMap() { return addressMap; } public void setAddressMap(Map addressMap) { this.addressMap = addressMap; } public Properties getAddressProp() { return addressProp; } public void setAddressProp(Properties addressProp) { this.addressProp = addressProp; } }
下面是bean.xml中的内容:
<bean id="javaCollection" class="com.tuorialsponit.JavaCollection"> <property name="addressList"> <list> <value>INDIA</value> <value>Pakistan</value> <value>USA</value> <value>USA</value> </list> </property> <property name="addressSet"> <set> <value>INDIA</value> <value>Pakistan</value> <value>USA</value> <value>USA</value> </set> </property> <!-- results in a setAddressMap(java.util.Map) call --> <property name="addressMap"> <map> <entry key="1" value="INDIA"/> <entry key="2" value="Pakistan"/> <entry key="3" value="USA"/> <entry key="4" value="USA"/> </map> </property> <property name="addressProp"> <props> <prop key="one">INDIA</prop> <prop key="two">Pakistan</prop> <prop key="three">USA</prop> <prop key="four">USA</prop> </props> </property> </bean>
MainApp.java中的内容:
public class MainApp { public static void main(String[] args){ ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); JavaCollection jc = (JavaCollection) context.getBean("javaCollection"); System.out.println(jc.getAddressList()); System.out.println(jc.getAddressSet()); System.out.println(jc.getAddressMap()); System.out.println(jc.getAddressProp()); } }
运行结果:
注入Bean引用
下面的Bean定义将帮助你理解如何注入bean的引用作为集合元素。甚至你可以将引用和值混合在一起,如下所示:
<property name="addressList"> <list> <ref bean="helloIndia"/> <value>INDIA</value> <value>Pakistan</value> <value>USA</value> <value>USA</value> </list> </property> <bean id="helloIndia" class="com.tuorialsponit.HelloIndia" parent="beanTemplate"> <property name="message1" value="hello India"></property> <property name="message3" value="Namaste India"></property> </bean>
为了使用上面的bean定义,你需要定义setter方法,它们应该也是能够用这种方式处理引用。
注入null和空字符串的值
如果你需要传递一个空字符串作为值,那么可以像如下方式这样传递它:
<bean id="helloIndia" class="com.tuorialsponit.HelloIndia" parent="beanTemplate"> <property name="message1" value="hello India"></property> <property name="message3" value=""></property> </bean>
如果你需要传递一个NULL值,那么你可以传递它,如下所示:
<bean id="helloIndia" class="com.tuorialsponit.HelloIndia" parent="beanTemplate"> <property name="message1" value="hello India"></property> <property name="message3"><null/></property> </bean>