Spring 注入集合

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

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

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

  1. 参考《第一个 Spring 程序》,新建一个名为 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 +
                    '}';
        }
    }
  1. 在 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>
  1. 在 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());
        }
    }
  1. 运行 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 + '\'' +
                    '}';
        }
    }
  1. 将 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 +
                    '}';
        }
    }
  1. 将 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 @ 2023-01-17 17:13  HopeLive  阅读(119)  评论(0)    收藏  举报