• Spring Collections


    下面讲怎样将值注入集合类型,包含以下四种主要的集合类型:

    • List
    • Set
    • Map
    • Properties

    编写 Person.java && Customer.java

    仍旧使用原项目,创建一个包:com.shiyanlou.spring.collections,直接拷贝上一个小实验的 Person 类到刚创建的 collections 包下即可。然后创建一个 Customer.java,内容如下:

    package com.shiyanlou.spring.collections;
    
    import java.util.*;
    
    import com.shiyanlou.spring.innerbean.Person;
    
    public class Customer {
    
        private List<Object> lists; // 这里的 lists 要和 Bean 中 property 标签的 name 一样。详见本段代码下的注释。
        private Set<Object> sets ;
        private Map<Object, Object> maps ;
        private Properties pros;
    
        public List<Object> getLists() {
            return lists;
        }
        public void setLists(List<Object> lists) {
            this.lists = lists;
        }
        public Set<Object> getSets() {
            return sets;
        }
        public void setSets(Set<Object> sets) {
            this.sets = sets;
        }
        public Map<Object, Object> getMaps() {
            return maps;
        }
        public void setMaps(Map<Object, Object> maps) {
            this.maps = maps;
        }
        public Properties getPros() {
            return pros;
        }
        public void setPros(Properties pros) {
            this.pros = pros;
        }
    
        private Person person; // 不要忘记写内部要引用的 Bean
    
        public Customer(Person person) {
            this.person = person;
        }
    
        public Customer(){}
    
        public void setPerson(Person person) {
            this.person = person;
        }
    
        @Override
        public String toString() {
            return "Customer [person=" + person + "]";
        }
    }
    

    注意:JavaBean 关于属性命名的特殊规范,Spring 配置文件中 元素所指定的属性名和 Bean 实现类的 Setter 方法满足 Sun JavaBean 的属性命名规范:xxx 的属性对应 setxxx() 方法。一般情况下 Java 的属性变量名都以小写字母起头,如:maxSpeed。但也存在特殊的情况,考虑到一些特定意义的大写英文缩略词(如:USA、XML),JavaBean 也允许大写字母起头的属性变量名,不过必须满足: 变量的前两个字母要么全部大写,要么全部小写。如:iC、iCcard、iDcode 这些都不合法的。

    编写 SpringCollections.xml

    在 src/main/resources 下创建配置文件 SpringCollections.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 最好首字母小写 -->
        <bean id = "customerBean" class = "com.shiyanlou.spring.collections.Customer">
    
            <!-- java.util.List -->
            <property name = "lists">
                <list>
                    <value>1</value>
                    <!-- List 属性既可以通过 <value> 注入字符串,也可以通过 <ref> 注入容器中其他的 Bean-->
                     <ref bean = "personBean" />
                     <value>2</value>
                    <bean class = "com.shiyanlou.spring.collections.Person">
                        <property name = "name" value = "shiyanlouList" />
                        <property name = "address" value = "chengdu" />
                        <property name = "age" value="25" />
                    </bean>
                </list>
            </property>
    
            <!-- java.util.Set -->
            <property name = "sets">
                <set>
                    <value>1</value><!--Set 与 List 类似-->
                    <ref bean = "personBean" />
                    <bean class = "com.shiyanlou.spring.collections.Person">
                        <property name = "name" value = "shiyanlouSet" />
                        <property name = "address" value = "chengdu" />
                        <property name = "age" value = "25" />
                    </bean>
                </set>
            </property>
    
            <!-- java.util.Map -->
            <property name = "maps">
                <map>
                    <entry key = "Key 1" value = "1" />
                    <!--一个 entry 就是一个 Map 元素-->
                    <entry key = "Key 2" value-ref = "personBean" />
                    <entry key = "Key 3">
                        <bean class = "com.shiyanlou.spring.collections.Person">
                            <property name = "name" value = "shiyanlouMap" />
                               <property name = "address" value = "chengdu" />
                            <property name = "age" value = "25" />
                        </bean>
                    </entry>
                </map>
            </property>
    
            <!-- java.util.Properties -->
            <property name = "pros">
            <!-- Properties 类型类似于Map 类型的特例,Map 元素的键值可以对应任何类型的对象,但是Properties只能是字符串-->
                <props>
                    <prop key = "admin">admin@nospam.com</prop>
                    <prop key = "support">support@nospam.com</prop>
                </props>
            </property>
        </bean>
    
        <bean id = "personBean" class = "com.shiyanlou.spring.collections.Person">
            <property name = "name" value = "shiyanlouPersonBean" />
            <property name = "address" value = "chengdu" />
            <property name = "age" value = "25" />
        </bean>
    </beans>
    

    编写 App.java

    代码如下,详见注释:

    package com.shiyanlou.spring.collections;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    public class App
    {
        private static ApplicationContext context;
    
            public static void main( String[] args )
            {
                context = new ClassPathXmlApplicationContext("SpringCollections.xml");
    
                /*
                 * case 1 : List 第1种情况
                 */
                Customer customer = (Customer) context.getBean("customerBean");
                System.out.println(customer.getLists().toString());
    
                /*
                 * case 2 : Set 第2种情况
                 */
                System.out.println(customer.getSets().toString());
    
                /*
                 * case 3 : Map 第3种情况
                 */
                System.out.println(customer.getMaps().toString());
    
                /*
                 * case 4 : 第4种情况
                 */
                System.out.println(customer.getPros().toString());
    
    
            }
    }
    

    运行结果

    运行

    mvn compile
    mvn exec:java -Dexec.mainClass="com.shiyanlou.spring.collections.App"
    

  • 相关阅读:
    SpringBoot项目maven 打包时跳过测试
    scss 学习笔记
    万事都源于一个字:缘
    H To begin or not to begin 题解(思维)
    条件 题解(bitset优化floyd)
    Dima and Salad 题解(01背包变形)
    P1052 [NOIP2005 提高组] 过河 题解(dp+数论优化)
    A Simple Math Problem 题解(数论)
    威佐夫博弈
    P3951 [NOIP2017 提高组] 小凯的疑惑 题解(数论/结论题)
  • 原文地址:https://www.cnblogs.com/sakura579/p/13923692.html
Copyright © 2020-2023  润新知