按照spring的HelloWorld案例,创建一个项目。涉及的bean类三个Car.java House.java Person.java,其中Car和House是Person的成员。 DataBase.java类是测试Properties属性的。 MainTest.java是一个有main函数的测试类。 spring.xml是容器配置文件(结尾有整个项目的完整代码)。
一、配置List和Map集合
在Person类中有如下所示的两个成员变量,通过使用list和map标签即可完成集合的属性注入。
在list中即可以使用ref引用其他bean的id作为集合元素,也可以使用bean定义一个合法的内部bean作为集合元素。
map的方式与list相似,由于是键值对所以需要使用entry来制定key和value的值。
至于set、数组与list的配置基本相同,就不再做介绍。
private List<Car> cars;
private Map<String, House> houses;
<bean id="person" class="com.escore.beans.Person">
<property name="name" value="Tom"></property>
<!-- 配置List -->
<property name="cars">
<list>
<ref bean="car1"/>
<bean class="com.escore.beans.Car">
<property name="brand" value="BYD"></property>
</bean>
</list>
</property>
<!-- 配置Map -->
<property name="houses">
<map>
<entry key="xj001" value-ref="house1"></entry>
<entry key="xj111">
<bean class="com.escore.beans.House">
<property name="address" value="XiangJiangRoad111"></property>
</bean>
</entry>
</map>
</property>
</bean>
二、配置独立的集合
首先需要引入spring的util空间,引入后就可以配置一个独立的集合类型。如下面的代码所示,配置了一个list和map集合。这里都是用了引用的方式配置集合的元素,按照上面的配置集合元素也是可以的。这样配置后,就可以反复使用list和map,只要想person2一样引入它们的id即可。
<util:list id="cars">
<ref bean="car1"/>
<ref bean="car2"/>
</util:list>
<util:map id="houses">
<entry key="h1" value-ref="house1"></entry>
<entry key="h2" value-ref="house2"></entry>
</util:map>
<bean id="person2" class="com.escore.beans.Person">
<property name="name" value="Jerry"></property>
<property name="cars" ref="cars"></property>
<property name="houses" ref="houses"></property>
</bean>
三、配置Properties属性
在DataBase类中有一个Properties类型的properties属性。按照下面的配置文件,即可以配置Properties的属性。
<bean id="dataBase" class="com.escore.beans.DataBase">
<property name="properties">
<props>
<prop key="url"></prop>
<prop key="driven">com.mysql.jdbc.Driver</prop>
<prop key="user">root</prop>
<prop key="password">pwd</prop>
</props>
</property>
</bean>
在MainTest测试类中通过获取不同的bean可以查看到相应的效果。
------------------------------------------------------------------------------下面是本节的完整代码---------------------------------------------------------
Car.java
public class Car {
private String brand;
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
@Override
public String toString() {
return "Car [brand=" + brand + "]";
}
}
DataBase.java
mport java.util.Properties;
public class DataBase {
private Properties properties;
public Properties getProperties() {
return properties;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
@Override
public String toString() {
return "DataBase [properties=" + properties + "]";
}
}
House.java
public class House {
private String address;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "House [address=" + address + "]";
}
}
Person.java
import java.util.List;
import java.util.Map;
public class Person {
private String name;
private List<Car> cars;
private Map<String, House> houses;
public Map<String, House> getHouses() {
return houses;
}
public void setHouses(Map<String, House> houses) {
this.houses = houses;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Car> getCars() {
return cars;
}
public void setCars(List<Car> cars) {
this.cars = cars;
}
@Override
public String toString() {
return "Person [name=" + name + ", cars=" + cars + ", houses=" + houses + "]";
}
}
MainTest.java
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.escore.beans.DataBase;
import com.escore.beans.Person;
public class MainTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml");
Person person = (Person) ctx.getBean("person2");
System.out.println(person);
DataBase dataBase = (DataBase) ctx.getBean("dataBase");
System.out.println(dataBase);
ctx.close();
}
}
spring.xml
<?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.1.xsd">
<bean id="car1" class="com.escore.beans.Car">
<property name="brand" value="BMW"></property>
</bean>
<bean id="car2" class="com.escore.beans.Car">
<property name="brand" value="Audi"></property>
</bean>
<bean id="house1" class="com.escore.beans.House">
<property name="address" value="XiangJiangRoad001"></property>
</bean>
<bean id="house2" class="com.escore.beans.House">
<property name="address" value="XiangJiangRoad011"></property>
</bean>
<bean id="person" class="com.escore.beans.Person">
<property name="name" value="Tom"></property>
<!-- 配置List -->
<property name="cars">
<list>
<ref bean="car1"/>
<bean class="com.escore.beans.Car">
<property name="brand" value="BYD"></property>
</bean>
</list>
</property>
<!-- 配置Map -->
<property name="houses">
<map>
<entry key="xj001" value-ref="house1"></entry>
<entry key="xj111">
<bean class="com.escore.beans.House">
<property name="address" value="XiangJiangRoad111"></property>
</bean>
</entry>
</map>
</property>
</bean>
<!-- 独立的集合 -->
<util:list id="cars">
<ref bean="car1"/>
<ref bean="car2"/>
</util:list>
<util:map id="houses">
<entry key="h1" value-ref="house1"></entry>
<entry key="h2" value-ref="house2"></entry>
</util:map>
<bean id="person2" class="com.escore.beans.Person">
<property name="name" value="Jerry"></property>
<property name="cars" ref="cars"></property>
<property name="houses" ref="houses"></property>
</bean>
<!-- 配置Properties属性 -->
<bean id="dataBase" class="com.escore.beans.DataBase">
<property name="properties">
<props>
<prop key="url"></prop>
<prop key="driven">com.mysql.jdbc.Driver</prop>
<prop key="user">root</prop>
<prop key="password">pwd</prop>
</props>
</property>
</bean>
</beans>