zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    【BZOJ2006】[NOI2010] 超级钢琴(堆+RMQ)
    【洛谷1120】小木棍(一道有技巧的dfs)
    【BZOJ1857】传送带(分治经典:三分套三分)
    【BZOJ1045】糖果传递(基于贪心的数学题)
    【CF1000C】Covered Points Count(离散化+差分)
    【洛谷1486】[NOI2004] 郁闷的出纳员(Splay的小运用)
    【洛谷1156】垃圾陷阱(动态规划)
    严格次小生成树学习笔记
    高斯消元入门
    【洛谷4011】孤岛营救问题(状压SPFA)
  • 原文地址:https://www.cnblogs.com/shwo/p/9849579.html
Copyright © 2011-2022 走看看