带有集合的构造函数注入示例

在Spring框架中,我们可以通过构造函数注入来注入集合值。在constructor-arg元素内部可以使用三个元素:

  1. list:列表
  2. set:集合
  3. map:映射

每种集合都可以包含基于字符串和非字符串的值。

在这个示例中,我们以Forum为例,其中一个问题可以有多个答案。这里有三个部分:

  1. Question.java
  2. applicationContext.xml
  3. Test.java

在这个例子中,我们使用的是可以包含重复元素的列表(List),你也可以使用只包含唯一元素的集合(Set)。但是,你需要在applicationContext.xml文件中将list更改为set,在Question.java文件中将List更改为Set。

Question.java

这个类包含三个属性,两个构造函数和一个displayInfo()方法来打印信息。在这里,我们使用List来包含多个答案。

package cn.javatiku;

import java.util.Iterator;
import java.util.List;

public class Question {
    private int id;
    private String name;
    private List<String> answers;

    public Question() {}

    public Question(int id, String name, List<String> answers) {
        super();
        this.id = id;
        this.name = name;
        this.answers = answers;
    }

    public void displayInfo() {
        System.out.println(id + " " + name);
        System.out.println("answers are:");
        Iterator<String> itr = answers.iterator();
        while (itr.hasNext()) {
            System.out.println(itr.next());
        }
    }
}

applicationContext.xml

在这个XML文件中,我们使用list元素来定义集合。

<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
                http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="q" class="cn.javatiku.Question">
        <constructor-arg value="111"></constructor-arg>
        <constructor-arg value="What is java?"></constructor-arg>
        <constructor-arg>
            <list>
                <value>Java is a programming language</value>
                <value>Java is a Platform</value>
                <value>Java is an Island of Indonasia</value>
            </list>
        </constructor-arg>
    </bean>

</beans>

Test.java

这个类从applicationContext.xml文件中获取bean,并调用displayInfo方法。

package cn.javatiku;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class Test {
    public static void main(String[] args) {
        Resource r = new ClassPathResource("applicationContext.xml");
        BeanFactory factory = new XmlBeanFactory(r);

        Question q = (Question) factory.getBean("q");
        q.displayInfo();
    }
}

当你运行Test类时,它将创建一个ID为111,问题为"What is java?"的Question对象,并且它包含三个答案:"Java is a programming language","Java is a Platform"和"Java is an Island of Indonasia"。然后,displayInfo()方法将打印这些信息。

标签: spring, Spring教程, Spring技术, Spring语言学习, Spring学习教程, Spring下载, Spring框架, Spring框架入门, Spring框架教程, Spring框架高级教程, Spring面试题, Spring笔试题, Spring编程思想