3.3 注入集合对象

集合是Java项目开发中的重要组成部分,Spring中也支持常用集合类型的注入,包括数组(等价于List集合)、Set集合、Map集合和Properties集合。

3.3.1 注入数组对象

数组是一种固定的线性存储集合,Spring中将数组与List集合进行了统一,即配置数组时使用<list>或<array>元素描述,最终的效果是完全相同的。

1.【mldnspring-base项目】修改Dept.java程序类,追加数组属性。

本类中一共可以注入两个数组:部门信息(infos)和部门员工(List)。

2.【mldnspring-base项目】修改spring-base.xml配置文件,追加数组配置。

本程序定义了两个Emp对象,而后将这两个对象直接注入到了Dept对象之中(List集合)。

提示:<list>与<array>元素可以互换。

通过以上配置可以发现,infos为数组,所以使用<array>元素描述;emps为List集合,所以使用<list>元素描述。Spring中,这两者之间是可以互相替换的。

范例:修改配置。

本程序中,infos使用了<list>元素,emps使用了<array>元素,虽然标记元素不同,但Spring会自动帮助用户进行处理。

3.【mldnspring-base项目】编写TestDept程序类,测试数组对象注入。

本程序在测试类中启动了Spring容器,并且注入了Dept对象,由于该对象之中infos属于数组,所以可以直接使用Arrays.toString()进行输出。对于List集合,则可以直接利用Lambda表达式结合forEach方法输出。

提示:List实例化子类。

通过如上配置可以发现,在Bean配置中如果使用<list>或<array>元素进行数组或集合注入,会自动进行List集合实例化。在测试类中,可以通过如下代码测试Spring使用的List子类:

程序执行后返回的是class java.util.ArrayList子类。之所以使用ArrayList,是因为进行配置文件定义时,配置项的元素个数是固定的,使用ArrayList作为默认List实例化子类更加合理。

3.3.2 注入Set集合

Set集合的最大特征是不允许存在重复内容。另外,Spring中为了保证数据的存储顺序,默认使用LinkedHashSet子类实例化Set集合。

1.【mldnspring-base项目】修改Dept程序类,追加Set集合属性。

2.【mldnspring-base项目】编辑spring-base.xml配置文件,追加部门配置。

由于需要注入的是Set集合,所以使用了<set>元素。另外,为了体现Set集合不保存重复数据这一特点,这里特意设置了两项相同的内容。

3.【mldnspring-base项目】编写测试类。

执行程序可以发现,Set集合并没有保存重复的内容;另外,Set集合中各内容的顺序就是其配置文件定义的顺序。

3.3.3 注入Map集合

Map集合注入的时候需要通过<map>元素进行配置,配置时需要设置元素的key与value。同时,为了保证集合保存顺序,默认会使用LinkedHashMap子类。

1.【mldnspring-base项目】修改Dept.java类,追加Map集合属性。

2.【mldnspring-base项目】编辑spring-base.xml配置文件,注入Map集合。

本程序为Map集合注入了两个雇员的信息。由于Map中的key类型为String,所以设置的key为普通字符串数据,而Map中的value则引入了配置Bean类。

3.【mldnspring-base项目】编写测试程序,实现Map数据输出。

由于Map集合中的key不允许重复,所以在本程序中如果设置了重复的key,则会产生替换处理。通过配置结果也可以发现,Map集合中的数据保存顺序为配置顺序。

3.3.4 注入Properties集合

Properties是Hashtable的子类,在实际开发中用于配置信息的保存处理,其所保存的key与value全部为String型数据。

1.【mldnspring-base项目】修改Dept.java程序类,追加Properties属性。

2.【mldnspring-base项目】修改spring-base.xml配置文件,配置Properties属性内容。

3.【mldnspring-base项目】编写测试程序,输出全部的Properties信息。

由于Properties是Hashtable子类,所以可以直接使用forEach输出。通过输出结果可以发现,Properties中保存的顺序是无序的。

提示:Properties与框架整合。

在Bean管理中,有关集合注入最为重要的就是Properties属性,如果需要进行Spring框架整合处理,例如整合Hibernate、MyBatis等,可以通过Properties进行相关属性的定义。