Spring深入浅出(六),依赖注入,注入集合(含注入 Bean 引用)

前面已经讲解如何使用 value 属性来配置基本数据类型和在 bean 配置文件中使用<property>标签的 ref 属性来配置对象引用。现在如果想传递多个值,如 Java Collection 类型 List、Set、Map 和 Properties,应该怎么做?

Spring 提供了四种类型的集合的配置元素,如下所示:

标签说明
<list> 用于注入 list 类型的值,允许重复
<set> 用于注入 set 类型的值,不允许重复
<map> 用于注入 key-value 的集合,其中 key-value 可以是任意类型
<props> 用于注入 key-value 的集合,其中 key-value 都是字符串类型

 一、创建CollectionTest类

package com.clzhang.spring.demo;

import java.util.*;

public class CollectionTest {
    String[] strings;
    List addressList;
    Set addressSet;
    Map addressMap;
    Properties addressProp;
    
    // 存放数组
    public String[] getStrings() {
        System.out.println("Array Elements :" + strings);
        return strings;
    }
    public void setStrings(String[] strings) {
        this.strings = strings;
    }
    
    // 存放List
    public void setAddressList(List addressList) {
        this.addressList = addressList;
    }
    public List getAddressList() {
        System.out.println("List Elements :" + addressList);
        return addressList;
    }

    // 存放Set
    public void setAddressSet(Set addressSet) {
        this.addressSet = addressSet;
    }
    public Set getAddressSet() {
        System.out.println("Set Elements :" + addressSet);
        return addressSet;
    }

    // 存放Map
    public void setAddressMap(Map addressMap) {
        this.addressMap = addressMap;
    }
    public Map getAddressMap() {
        System.out.println("Map Elements :" + addressMap);
        return addressMap;
    }

    // 存放Prop
    public void setAddressProp(Properties addressProp) {
        this.addressProp = addressProp;
    }
    public Properties getAddressProp() {
        System.out.println("Property Elements :" + addressProp);
        return addressProp;
    }
}

二、创建主程序

package com.clzhang.spring.demo;

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

public class MainApp {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
        CollectionTest jc = (CollectionTest) context.getBean("collectionTest");
        jc.getStrings();
        jc.getAddressList();
        jc.getAddressSet();
        jc.getAddressMap();
        jc.getAddressProp();
    }
}

三、创建配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <!-- Definition -->
    <bean id="address1" class="com.clzhang.spring.demo.Address1" />
    <bean id="collectionTest"
        class="com.clzhang.spring.demo.CollectionTest">
        <property name="strings">
            <list>
                <value>印度</value>
                <value>日本</value>
                <value>中国</value>
                <value>中国</value>
            </list>
        </property>

        <property name="addressList">
            <list>
                <value>印度</value>
                <value>日本</value>
                <value>中国</value>
                <value>中国</value>
                <ref bean="address1" />
            </list>
        </property>

        <property name="addressSet">
            <set>
                <value>印度</value>
                <value>日本</value>
                <value>中国</value>
                <value>中国</value>
                <ref bean="address1" />
            </set>
        </property>

        <property name="addressMap">
            <map>
                <entry key="1" value="印度" />
                <entry key="2" value="日本" />
                <entry key="3" value="中国" />
                <entry key="4" value="中国" />
                <entry key="5" value-ref="address1" />
            </map>
        </property>

        <property name="addressProp">
            <props>
                <prop key="one">印度</prop>
                <prop key="two">日本</prop>
                <prop key="three">中国</prop>
                <prop key="four">中国</prop>
            </props>
        </property>
    </bean>
</beans>

四、创建注入Bean

package com.clzhang.spring.demo;

public class Address1 {
    public String toString() {
        return "地址一";
    }
}

五、运行

Array Elements :[Ljava.lang.String;@45820e51
List Elements :[印度, 日本, 中国, 中国, 地址一]
Set Elements :[印度, 日本, 中国, 地址一]
Map Elements :{1=印度, 2=日本, 3=中国, 4=中国, 5=地址一}
Property Elements :{two=日本, one=印度, three=中国, four=中国}

本文参考:

https://www.w3cschool.cn/wkspring/kp5i1ico.html

http://c.biancheng.net/spring/inject-collection.html

posted @ 2021-07-12 13:27  那些年的事儿  阅读(233)  评论(0编辑  收藏  举报