为集合类型的属性注值

为数组、List集合、Set集合、Map集合、Properties注入值

Employee类的代码:

public class Employee {
    private String name;
    private int age;
    //不列出set和get方法
    @Override
    public String toString() {
        return "Employee [name=" + name + ", age=" + age + "]";
    }
}

Collection类的代码:

public class Collection {
    private String[] empNames;
    private List<Employee> empList;
    private Set<Employee> empSet;
    private Map<String,Employee> empMap;
    private Properties properties;
    /*
     * List、Set、Map均是接口,那么它们的真实类型到底是什么呢?真实类型由IOC容器决定
     */

    //不列出set和get方法
}

准备好2个Employee类的bean,代码如下:

    <bean id="emp1" class="com.Employee">
        <property name="name" value="張三"></property>
        <property name="age" value="20"></property>
    </bean>
    <bean id="emp2" class="com.Employee">
        <property name="name" value="李四"></property>
        <property name="age" value="22"></property>
    </bean>

现在为集合属性注值,代码如下:

    <bean id="collection" class="com.Collection">
        <!-- 为数组注入值 -->
        <property name="empNames">
            <list>
                <value>張三</value>
                <value>李四</value>
            </list>
        </property>

        <!-- 为List集合注入值 -->
        <property name="empList">
            <list>
                <ref bean="emp1"/>
                <ref bean="emp2"/>
                <ref bean="emp2"/>
            </list>
        </property>

        <!-- 为Set集合注入值 -->
        <property name="empSet">
            <set>
                <ref bean="emp1"/>
                <ref bean="emp2"/>
                <ref bean="emp2"/>
            </set>
        </property>

        <!-- 为map注入值 -->
        <property name="empMap">
            <map>
                <entry key="001" value-ref="emp1"></entry>
                <entry key="002" value-ref="emp2"></entry>
            </map>
        </property>

        <!-- 为 Properties注入值-->
        <property name="properties">
            <props>
                <prop key="110">hello</prop>
                <prop key="120">spring</prop>
            </props>
        </property>
    </bean>

说明:

(1)为数组属性注入值:使用property标签下面的list子标签
为List属性注值:使用property标签下面的list子标签
为Set属性注值:使用property标签下面的set子标签
为map属性注值:使用property标签下面的map子标签
为properties属性注值:使用property标签下面的props子标签
(2)在Collection类中,有

    private List<Employee> empList;
    private Set<Employee> empSet;
    private Map<String,Employee> empMap;

这3个属性。
①这3个属性的编译类型(声明类型)都是接口类型
②由IOC容器通过set方法为这3个属性赋值,那么IOC容器传过来的真实类型是什么呢?

public class Main {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

        Collection collection=(Collection)context.getBean("collection");

        //输出:class java.util.ArrayList
        System.out.println(collection.getEmpList().getClass());

        //输出:class java.util.LinkedHashSet
        System.out.println(collection.getEmpSet().getClass());

        //输出:class java.util.LinkedHashMap
        System.out.println(collection.getEmpMap().getClass());
    }
}

可见:
IOC容器实现List接口:ArrayList;
IOC容器实现Set接口:LinkedHashSet;
IOC容器实现Map接口:LinkedHashMap。
(3)为Properties属性(有key和value,值得关注)注入值

        <!-- 为 Properties注入值-->
        <property name="properties">
            <props>
                <prop key="001">张三</prop>
                <prop key="002">李四</prop>
            </props>
        </property>

<props> 标签里使用多个 <prop> 作为子标签。每个 <prop> 标签必须定义 key 属性
(4)为Map属性(有key和value,值得关注)注入值

        <!-- 为map注入值 -->
        <property name="empMap">
            <map>
                <entry key="001" value-ref="emp1"></entry>
                <entry key="002" value-ref="emp2"></entry>
            </map>
        </property>

<map> 标签里使用多个 <entry> 作为子标签。每个<entry>包含一个键和一个值
<entry>标签中,简单常量使用 key 和 value 属性来定义; Bean 引用通过 key-ref 和 value-ref 属性定义
(5)为数组属性注入值

        <!-- 为数组注入值 -->
        <property name="empNames">
            <list>
                <value>張三</value>
                <value>李四</value>
            </list>
        </property> 

通过property标签下面的list子标签可以为数组注入值,但后来发现使用property标签下面的array子标签也可以为数组注入值。代码如下:

public class Test {
    private Object[] objs;
    private int[] numbers;
    private String[] strs;
    //不列出set和get方法
}
    <bean id="test" class="com.Test">
        <property name="objs">
            <array>
                <value>10</value>
                <null></null>
                <value>hello</value>
            </array>
        </property>

        <property name="numbers">
            <array>
                <value>10</value>
                <value>100</value>
                <value>5</value>
            </array>
        </property>

        <property name="strs">
            <array>
                <value>c</value>
                <value>m</value>
                <value>d</value>
            </array>
        </property>
    </bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值