Spring装配集合属性

在Spring中可以装配4种集合类型属性:List、set、Map和Properties。与这四种集合对应的标签是、、、。CollectionBean是一个包含上述4种集合类型的JavaBean,代码如下:

package chapter22;

import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

public class CollectionBean {
    private List myList;
    private String myArray[];
    private Set mySet;
    private Map myMap;
    private Properties myProperties;
    
    public List getMyList() {
        return myList;
    }
    public void setMyList(List myList) {
        System.out.println("set List类型:"+myList.getClass().getName());
        this.myList = myList;
    }
    public String[] getMyArray() {
        return myArray;
    }
    public void setMyArray(String[] myArray) {
        this.myArray = myArray;
    }
    public Set getMySet() {
        return mySet;
    }
    public void setMySet(Set mySet) {
        System.out.println("set Set类型:"+mySet.getClass().getName());
        this.mySet = mySet;
    }
    public Map getMyMap() {
        return myMap;
    }
    public void setMyMap(Map myMap) {
        System.out.println("set Map类型:"+myMap.getClass().getName());
        this.myMap = myMap;
    }
    public Properties getMyProperties() {
        return myProperties;
    }
    public void setMyProperties(Properties myProperties) {
        System.out.println("set Properties类型:"+myProperties.getClass().getName());
        this.myProperties = myProperties;
    }
}
下面是装配上述4中集合类型属性的配置代码
xml version="1.0" encoding="UTF-8"?>
<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <bean id="helloservice" class="chapter22.HelloServiceImpl">
        <property name="greeting" value="greeting Xu Wei">property>bean>
    <bean id="myBean" class="chapter22.MyBean">
        <property name="hello">
            <ref bean="helloservice" />property>
        <property name="strName" value="Xu Wei">property>bean>
    <bean id="CollectionBean" class="chapter22.CollectionBean">
    <property name="myList">
            <list><value>abcdvalue>
                <idref bean="myBean">idref>
                list>
        property><property name="myMap">
            <map>
                <entry>
                    <key>
                        <value>hellovalue>key>
                    <value>1234value>entry>
                <entry key="abcd">
                    <ref bean="helloservice" />entry>
                <entry>
                    <key>
                        <ref bean="helloservice" >ref>key>
                    <ref bean="myBean" >ref>entry>map>property>
        <property name="mySet">
            <set>
                <value>testvalue>
                <ref bean="myBean">ref>set>property>
                
        <property name="myProperties">
            <props><prop key="abcd">value1prop>
                <prop key="prop">myPropprop>props>property>
        <property name="myArray">
            <list>
                <value>myArrayvalue>
                <idref bean="helloservice" >idref>list>property>bean>
beans>

下面的TestCollectionContext.java代码使用ApplicationContext接口的getBean方法创建了CollectionBean对象,并访问了相关属性。

package chapter22;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

public class TestCollectionBean {
    public static void main(String args[])
    {
        ApplicationContext ctx=new FileSystemXmlApplicationContext("src//applicationContext.xml");
/*在创建ctx对象实例以后,applicationContext.xml配置中涉及到的Bean的set方法都被调用了。
 *单单执行ApplicationContext ctx=new FileSystemXmlApplicationContext("src//applicationContext.xml");
 *的输出结果是:
 *log4j:WARN No appenders could be found for logger (org.springframework.context.support.FileSystemXmlApplicationContext).
 *log4j:WARN Please initialize the log4j system properly.
 *setGreeting()方法被调用
 *setHello()方法被调用
 *setStrName()方法被调用
 *set List类型:java.util.ArrayList
 *set Map类型:java.util.LinkedHashMap
 *set Set类型:java.util.LinkedHashSet
 *set Properties类型:java.util.Properties
 */    
        //创建CollectionBean对象cb。
        CollectionBean cb=(CollectionBean)ctx.getBean("CollectionBean");
        
        System.out.println("------测试List------");
        for(String s:cb.getMyList())
            System.out.println(s);
        System.out.println("------测试Array------");
        for(String s:cb.getMyArray())
            System.out.println(s);
        System.out.println("------测试Set------");
        for(Object obj:cb.getMySet())
            System.out.println(obj.getClass().getName());
        System.out.println("------测试Map------");
        //Map其实就是key-value的键值对。cb.getMyMap().get(key)是要找到key所对应的value。
        for(Object key:cb.getMyMap().keySet())
            System.out.println(key+"="+cb.getMyMap().get(key));
        System.out.println("------测试Properties------");
        for(Object key:cb.getMyProperties().keySet())
            System.out.println(key+"="+cb.getMyProperties().get(key));
    }
}

输出结果:

log4j:WARN No appenders could be found for logger (org.springframework.context.support.FileSystemXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
setGreeting()方法被调用
setHello()方法被调用
setStrName()方法被调用
set List类型:java.util.ArrayList
set Map类型:java.util.LinkedHashMap
set Set类型:java.util.LinkedHashSet
set Properties类型:java.util.Properties
------测试List------
abcd
myBean
------测试Array------
myArray
helloservice
------测试Set------
java.lang.String
chapter22.MyBean
------测试Map------
hello=1234
abcd=chapter22.HelloServiceImpl@e70e30
chapter22.HelloServiceImpl@e70e30=chapter22.MyBean@154864a
------测试Properties------
abcd=value1
prop=myProp
posted @ 2010-09-12 16:53  xwdreamer  阅读(2622)  评论(2编辑  收藏  举报