首先新建一个类,Car类的创建参照Spring全回顾之构造方法注入值
package com.kk.spring.beans.collections;
import java.util.List;
import com.kk.spring.beans.Car;
public class Person {
private String name;
private int age;
private List<Car> cars;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<Car> getCars() {
return cars;
}
public void setCars(List<Car> cars) {
this.cars = cars;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", cars=" + cars + "]";
}
}
可以看到Person 类有一个list属性,list的泛型是一个Car对象。如何给list里的Car对象注入值,看下面Spring配置文件内容
<?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"
xmlns:p="http://www.springframework.org/schema/p"
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.3.xsd">
<bean id="car" class="com.kk.spring.beans.Car">
<constructor-arg value="Audi" index="0"></constructor-arg>
<constructor-arg value="ShangHai" index="1"></constructor-arg>
<constructor-arg value="300000" type="double"></constructor-arg>
</bean>
<bean id="car2" class="com.kk.spring.beans.Car">
<constructor-arg value="BMW" type="java.lang.String"></constructor-arg>
<constructor-arg value="ShangHai" type="java.lang.String"></constructor-arg>
<constructor-arg value="240" type="int"></constructor-arg>
<!-- 另一种方式使用value子节点配置,属性值也可以使用value直接进行配置 -->
<constructor-arg type="int">
<value>260</value>
</constructor-arg>
</bean>
<!-- 测试如何配置集合属性 -->
<bean id="person3" class="com.kk.spring.beans.collections.Person">
<property name="name" value="Mike"></property>
<property name="age" value="28"></property>
<property name="cars">
<!-- 使用list节点,为list类型的属性赋值 -->
<list>
<!-- 方式一:应用外部Bean -->
<ref bean="car"/>
<ref bean="car2"/>
<!-- 方式二: 内部Bean -->
<bean class="com.kk.spring.beans.Car">
<constructor-arg value="Ford"></constructor-arg>
<constructor-arg value="ChangAn"></constructor-arg>
<constructor-arg value="200000" type=""></constructor-arg>
</bean>
</list>
</property>
</bean>
</beans>
在看Map如何配置,在新建一个类
package com.kk.spring.beans.collections;
import java.util.Map;
import com.kk.spring.beans.Car;
public class NewPerson {
private String name;
private int age;
private Map<String, Car> cars;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Map<String, Car> getCars() {
return cars;
}
public void setCars(Map<String, Car> cars) {
this.cars = cars;
}
@Override
public String toString() {
return "NewPerson [name=" + name + ", age=" + age + ", cars=" + cars + "]";
}
}
在看Spring配置文件
<!-- 配置Map属性值 -->
<bean id="newPerson" class="com.kk.spring.beans.collections.NewPerson">
<property name="name" value="Rose"></property>
<property name="age" value="30"></property>
<property name="cars">
<!-- 使用Map节点及Map的entry 子节点配置Map,类型的成员变量 -->
<map>
<entry key="AA" value-ref="car"></entry>
<entry key="BB" value-ref="car2"></entry>
</map>
</property>
</bean>
一个测试类看看效果
package com.kk.spring.beans.collections;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicaContext.xml");
Person person = (Person) ctx.getBean("person3");
System.out.println("person3: "+person);
NewPerson nwePerson = (NewPerson) ctx.getBean("newPerson");
System.out.println("nwePerson: "+nwePerson);
结果: