close

注入除了一般型態外,也可針對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>
arrow
arrow
    全站熱搜

    Codeless 發表在 痞客邦 留言(0) 人氣()