Spring教程-带有集合的构造函数注入示例
带有集合的构造函数注入示例
在Spring框架中,我们可以通过构造函数注入来注入集合值。在constructor-arg元素内部可以使用三个元素:
- list:列表
- set:集合
- map:映射
每种集合都可以包含基于字符串和非字符串的值。
在这个示例中,我们以Forum为例,其中一个问题可以有多个答案。这里有三个部分:
- Question.java
- applicationContext.xml
- 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()
方法将打印这些信息。