注入除了一般型態外,也可針對Collection(List、Map、Set、Properties)進行注入。
Customer.java
package com.example ; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; public class Customer { private List nameList ; private Map nameMap ; private Set nameSet ; private Properties nameProp ; public List getNameList() { return nameList; } public void setNameList(List nameList) { this.nameList = nameList; } public Map getNameMap() { return nameMap; } public void setNameMap(Map nameMap) { this.nameMap = nameMap; } public Set getNameSet() { return nameSet; } public void setNameSet(Set nameSet) { this.nameSet = nameSet; } public Properties getNameProp() { return nameProp; } public void setNameProp(Properties nameProp) { this.nameProp = nameProp; } }
Main.java
package com.example ; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); Customer cust = (Customer) context.getBean("Customer"); System.out.println("name list:"+cust.getNameList()) ; System.out.println("name map:"+cust.getNameMap()) ; System.out.println("name set:"+cust.getNameSet()) ; System.out.println("name property:"+cust.getNameProp()) ; } }
Map和Properties均屬於key-value paired,兩者差異在於Map key和value可以為任何物件型態,而Properties key和value只能為String型態。
Beans.xml
<bean id="Customer" class="com.example.Customer" >
<!-- java.util.List -->
<property name="nameList">
<list>
<value>Paul</value>
<value>Alice</value>
<value>Marry</value>
</list>
</property>
<!-- java.util.Map -->
<property name="nameMap">
<map>
<entry key="1" value="Paul"/>
<entry key="2" value="Alice"/>
<entry key="3" value="Marry"/>
<entry key="1" value="Paul"/>
</map>
</property>
<!-- java.util.Set -->
<property name="nameSet">
<set>
<value>Paul</value>
<value>Alice</value>
<value>Marry</value>
<value>Paul</value>
</set>
</property>
<!-- java.util.Property -->
<property name="nameProp">
<props>
<prop key="1">Paul</prop>
<prop key="2">Alice</prop>
<prop key="3">Marry</prop>
<prop key="1">Paul</prop>
</props>
</property>
</bean>
結果顯示如下所示:
name list:[Paul, Alice, Marry]
name map:{1=Paul, 2=Alice, 3=Marry}
name set:[Paul, Alice, Marry]
name property:{3=Marry, 2=Alice, 1=Paul}
接著混合ref bean的情況如下所示:
CustomerRef.java
package com.example; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; public class CustomerRef { private List lists; private Set sets; private Map maps; private Properties pros; public List getLists() { return lists; } public void setLists(List lists) { this.lists = lists; } public Set getSets() { return sets; } public void setSets(Set sets) { this.sets = sets; } public Map getMaps() { return maps; } public void setMaps(Map maps) { this.maps = maps; } public Properties getPros() { return pros; } public void setPros(Properties pros) { this.pros = pros; } }
Person.java
package com.example; public class Person { String name; String address; int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString(){ return "name:"+name+",address:"+address+",age:"+age ; } }
MainRef.java
package com.example; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainRef { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext( "BeansRef.xml"); CustomerRef cust = (CustomerRef) context.getBean("CustomerBean"); System.out.println(cust.getLists()); System.out.println(cust.getMaps()); System.out.println(cust.getSets()); System.out.println(cust.getPros()); } }
BeansRef.xml
<!-- java.util.List -->
<property name="lists">
<list>
<value>1</value>
<ref bean="PersonBean" />
<bean class="com.example.Person">
<property name="name" value="Steve" />
<property name="address" value="American" />
<property name="age" value="28" />
</bean>
</list>
</property>
<!-- java.util.Set -->
<property name="sets">
<set>
<value>1</value>
<ref bean="PersonBean" />
<bean class="com.example.Person">
<property name="name" value="Steve" />
<property name="address" value="American" />
<property name="age" value="28" />
</bean>
</set>
</property>
<!-- java.util.Map -->
<property name="maps">
<map>
<entry key="Key 1" value="1" />
<entry key="Key 2" value-ref="PersonBean" />
<entry key="Key 3">
<bean class="com.example.Person">
<property name="name" value="Steve" />
<property name="address" value="American" />
<property name="age" value="28" />
</bean>
</entry>
</map>
</property>
<!-- java.util.Properties -->
<property name="pros">
<props>
<prop key="1">Paul</prop>
<prop key="2">Alice</prop>
<prop key="3">Marry</prop>
</props>
</property>
</bean>
<bean id="PersonBean" class="com.example.Person">
<property name="name" value="Paul" />
<property name="address" value="Taipei" />
<property name="age" value="31" />
</bean>
結果顯示如下所示: [1, name:Paul,address:Taipei,age:31, name:Steve,address:American,age:28]
{Key 1=1, Key 2=name:Paul,address:Taipei,age:31, Key 3=name:Steve,address:American,age:28}
[1, name:Paul,address:Taipei,age:31, name:Steve,address:American,age:28]
{3=Marry, 2=Alice, 1=Paul}
Injecting null and empty string values
等同於setName("") ;
<bean id="..." class="...">
<property name="name" value=""/>
</bean>
等同於setName(null) ;
<bean id="..." class="...">
<property name="name"><null/></property>
</bean>