SpringFramework|基于XML的各类集合注入

SpringFramework|基于XML的各类集合注入

环境交代

Java: 1.8

Maven: 3

SpringFramework版本以及各组件成员: 5.1.1.RELEASE

  • spring-context
  • spring-core
  • spring-beans

背景

现在如果你想传递多个值,如 Java Collection 类型 List、Set、Map 和 Properties,应该怎么做呢。为了处理这种情况,Spring 提供了四种类型的集合的配置元素,如下所示:

元素 描述
<list> 它有助于关联一组值,如注入一列值,允许重复。
<set> 它有助于关联一组值,但不能重复。
<map> 它可以用来注入名称-值对的集合,其中名称和值可以是任何类型。
<props> 它可以用来注入名称-值对的集合,其中名称和值都是字符串类型。

你可以使用<list><set>来连接任何 java.util.Collection 的实现或数组。

你会遇到两种情况:

  • (a)传递集合中直接的值
  • (b)传递一个 bean 的引用作为集合的元素。

示例(设值注入, 此时为上述的(a)情况 - 在配置元数据中直接"赋值")

Bean - MyCollection.java

package noioo;

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

public class MyCollection {

    private List myList;
    private Set mySet;
    private Map myMap;
    private Properties myProperties;

    // 以下是一堆getter/setter...
    public List getMyList() {
        return myList;
    }

    public Map getMyMap() {
        return myMap;
    }

    public Set getMySet() {
        return mySet;
    }

    public Properties getMyProperties() {
        return myProperties;
    }

    public void setMyList(List myList) {
        this.myList = myList;
    }

    public void setMyMap(Map myMap) {
        this.myMap = myMap;
    }

    public void setMySet(Set mySet) {
        this.mySet = mySet;
    }

    public void setMyProperties(Properties myProperties) {
        this.myProperties = myProperties;
    }
}

配置文件 - spring-beans.xml

<?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.xsd">

    <bean id="myCollection" class="noioo.MyCollection">
        <property name="myList">
            <list>
                <value>List_A</value>
                <value>List_B</value>
                <value>List_C</value>
                <value>List_D</value>
            </list>
        </property>

        <property name="myMap">
            <map>
                <entry key="1" value="Map_A"/>
                <entry key="2" value="Map_B"/>
                <entry key="3" value="Map_C"/>
            </map>
        </property>

        <property name="myProperties">
            <props>
                <prop key="1">Props_A</prop>
                <prop key="2">Props_B</prop>
                <prop key="3">Props_C</prop>
            </props>
        </property>

        <property name="mySet">
            <set>
                <value>Set_A</value>
                <value>Set_B</value>
                <value>Set_C</value>
            </set>
        </property>
    </bean>
</beans>

执行者 - Runner.java

package noioo;

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

public class Runner {

    public static void main(String[] args){

        ApplicationContext context = new ClassPathXmlApplicationContext("spring-beans.xml");

        MyCollection myCollection = (MyCollection)context.getBean("myCollection");

        System.out.println(myCollection.getMyList());
        System.out.println(myCollection.getMySet());
        System.out.println(myCollection.getMyProperties());
        System.out.println(myCollection.getMyMap());
    }
}

运行结果

[List_A, List_B, List_C, List_D]
[Set_A, Set_B, Set_C]
{3=Props_C, 2=Props_B, 1=Props_A}
{1=Map_A, 2=Map_B, 3=Map_C}

Process finished with exit code 0

猜你喜欢

转载自www.cnblogs.com/shwo/p/9849579.html