6.注入集合

我们还可以在 Bean 标签下的 <property> 元素中,使用以下元素配置 Java 集合类型的属性和参数,例如 List、Set、Map 以及 Properties 等。

标签 说明
<list> 用于注入 list 类型的值,允许重复
<set> 用于注入 set 类型的值,不允许重复
<map> 用于注入 key-value 的集合,其中 key 和 value 都可以是任意类型
<props> 用于注入 key-value 的集合,其中 key  和 value 都是字符串类型

一、示例 1:在集合中设置普通类型的值

下面我们通过一个实例,演示下如何注入集合类型的属性和参数。

1. 新建一个名为 my-spring-demo4 的 Java 项目。

2. 在 net.biancheng.c 包下,创建一个名为 JavaCollection 的类,代码如下。

 
package net.biancheng.c;


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


public class JavaCollection {
//1 数组类型属性
private String[] courses;
//2 list 集合类型属性
private List<String> list;
//3 map 集合类型属性
private Map<String, String> maps;
//4 set 集合类型属性
private Set<String> sets;


public void setCourses(String[] courses) {
this.courses = courses;
}


public void setList(List<String> list) {
this.list = list;
}


public void setMaps(Map<String, String> maps) {
this.maps = maps;
}


public void setSets(Set<String> sets) {
this.sets = sets;
}


@Override
public String toString() {
return "JavaCollection{" +
"courses=" + Arrays.toString(courses) +
", list=" + list +
", maps=" + maps +
", sets=" + sets +
'}';
}
}

2. 在 src 目录下创建 Spring 配置文件 Beans.xml,配置如下。

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


<bean id="javaCollection" class="net.biancheng.c.JavaCollection">
<!--数组类型-->
<property name="courses">
<array>
<value>Java</value>
<value>PHP</value>
<value>C 语言</value>
</array>
</property>
<!--List 类型-->
<property name="list">
<list>
<value>张三</value>
<value>李四</value>
<value>王五</value>
<value>赵六</value>
</list>
</property>
<!--Map 类型-->
<property name="maps">
<map>
<entry key="JAVA" value="java"></entry>
<entry key="PHP" value="php"></entry>
</map>
</property>
<!--Set 类型-->
<property name="sets">
<set>
<value>MySQL</value>
<value>Redis</value>
</set>
</property>
</bean>
</beans>


3. 在 net.biancheng.c 包下,创建一个名为 MainApp 的类,代码如下。

package net.biancheng.c;


import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class MainApp {
private static final Log LOGGER = LogFactory.getLog(MainApp.class);


public static void main(String[] args) {
//获取 ApplicationContext 容器
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
//获取名为 employee 的 Bean
JavaCollection javaCollection = context.getBean("javaCollection", JavaCollection.class);
//通过日志打印员工信息
LOGGER.info(javaCollection.toString());
}
}


4. 运行 MainApp 类中的 main() 方法,控制台输出如下。

十二月 17, 2021 4:56:01 下午 net.biancheng.c.MainApp main
信息: JavaCollection{courses=[Java, PHP, C 语言], list=[张三, 李四, 王五, 赵六], maps={JAVA=java, PHP=php}, sets=[MySQL, Redis]}

二、示例 2:在集合中设置对象类型的值

在上面的示例中,都是在集合中通过 value 属性设置的普通类型的值,我们还可以通过 ref 属性在注入到 Bean 的集合中设置对象类型的值。

1. 在 my-spring-demo4 项目的 net.biancheng.c 包中,创建一个名为 Course 的类,代码如下。

package net.biancheng.c;


import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;


public class Course {
private static final Log LOGGER = LogFactory.getLog(Course.class);
//课程编号
private Integer courseId;
//课程名称
private String courseName;


public void setCourseId(Integer courseId) {
this.courseId = courseId;
}


public void setCourseName(String courseName) {
this.courseName = courseName;
}


@Override
public String toString() {
return "Course{" +
"courseId=" + courseId +
", courseName='" + courseName + '\'' +
'}';
}
}


2. 将 JavaCollection 中的代码修改成以下形式。

package net.biancheng.c;


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


public class JavaCollection {
//1 数组类型属性
private Course[] courses;
//2 list 集合类型属性
private List<String> list;
//3 map 集合类型属性
private Map<String, String> maps;
//4 set 集合类型属性
private Set<String> sets;


public void setCourses(Course[] courses) {
this.courses = courses;
}


public void setList(List<String> list) {
this.list = list;
}


public void setMaps(Map<String, String> maps) {
this.maps = maps;
}


public void setSets(Set<String> sets) {
this.sets = sets;
}


@Override
public String toString() {
return "JavaCollection{" +
"courses=" + Arrays.toString(courses) +
", list=" + list +
", maps=" + maps +
", sets=" + sets +
'}';
}
}


3. 将 Beans.xml 中配置修改成以下内容。

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


<bean id="course" class="net.biancheng.c.Course">
<property name="courseId" value="1"></property>
<property name="courseName" value="Java课程"></property>
</bean>
<bean id="course2" class="net.biancheng.c.Course">
<property name="courseId" value="2"></property>
<property name="courseName" value="PHP课程"></property>
</bean>


<bean id="course3" class="net.biancheng.c.Course">
<property name="courseId" value="3"></property>
<property name="courseName" value="C语言课程"></property>
</bean>


<bean id="javaCollection" class="net.biancheng.c.JavaCollection">
<!--数组类型-->
<property name="courses">
<array>
<ref bean="course"></ref>
<ref bean="course2"></ref>
<ref bean="course3"></ref>
</array>
</property>
<!--List 类型-->
<property name="list">
<list>
<value>张三</value>
<value>李四</value>
<value>王五</value>
<value>赵六</value>
</list>
</property>
<!--Map 类型-->
<property name="maps">
<map>
<entry key="JAVA" value="java"></entry>
<entry key="PHP" value="php"></entry>
</map>
</property>
<!--Set 类型-->
<property name="sets">
<set>
<value>MySQL</value>
<value>Redis</value>
</set>
</property>
</bean>
</beans>


4. 运行 MainApp 类中的 main() 方法,控制台输出如下。

十二月 17, 2021 5:20:04 下午 net.biancheng.c.MainApp main
信息: JavaCollection{courses=[Course{courseId=1, courseName='Java课程'}, Course{courseId=2, courseName='PHP课程'}, Course{courseId=3, courseName='C语言课程'}], list=[张三, 李四, 王五, 赵六], maps={JAVA=java, PHP=php}, sets=[MySQL, Redis]}
posted @ 2022-03-06 15:56  随遇而安==  阅读(31)  评论(0编辑  收藏  举报