使用基本的集合标签定义集合时, 不能将集合作为独立的 Bean 定义, 导致其他 Bean 无法引用该集合,所以无法在不同 Bean 之间共享集合。
可以使用 util schema 里的集合标签定义独立的集合 Bean, 需要注意的是,,必须在 <beans> 根元素里添加 util schema 定义。
示例:
1. 添加模型类
package xyz.huning.spring4.di.xml.beancfg.sharecollection;
public class Student {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
}
package xyz.huning.spring4.di.xml.beancfg.sharecollection;
import java.util.List;
public class School {
private int id;
private String name;
private List<Student> students;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
@Override
public String toString() {
return "School [id=" + id + ", name=" + name + ", students=" + students
+ "]";
}
}
2. 添加配置
<?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:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd"> <bean id="student1" class="xyz.huning.spring4.di.xml.beancfg.sharecollection.Student"> <property name="id" value="1"></property> <property name="name" value="Tom"></property> </bean> <bean id="student2" class="xyz.huning.spring4.di.xml.beancfg.sharecollection.Student"> <property name="id" value="2"></property> <property name="name" value="Kat"></property> </bean> <!--配置单例的bean,以供多个bean进行引用,需要导入util命名空间--> <util:list id="students1"> <ref bean="student1"/> <ref bean="student2"/> </util:list> <bean id="school1" class="xyz.huning.spring4.di.xml.beancfg.sharecollection.School"> <property name="id" value="1"></property> <property name="name" value="StarSchool"></property> <property name="students" ref="students1"></property> </bean> <bean id="school2" class="xyz.huning.spring4.di.xml.beancfg.sharecollection.School"> <property name="id" value="2"></property> <property name="name" value="SunSchool"></property> <property name="students" ref="students1"></property> </bean> </beans>
3. 添加测试类:
package xyz.huning.spring4.di.xml.beancfg.sharecollection;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("sharecollection.xml");
School school1 = ctx.getBean("school1", School.class);
System.out.println(school1);
School school2 = ctx.getBean("school2", School.class);
System.out.println(school2);
((ClassPathXmlApplicationContext)ctx).close();
}
}