版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010285684/article/details/80237122
一、实体类(省、市、县)
public class Province {
private int id;
private String priviceNumber;
private String priviceName;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPriviceNumber() {
return priviceNumber;
}
public void setPriviceNumber(String priviceNumber) {
this.priviceNumber = priviceNumber;
}
public String getPriviceName() {
return priviceName;
}
public void setPriviceName(String priviceName) {
this.priviceName = priviceName;
}
public Province() {
}
public Province(int id, String priviceNumber, String priviceName) {
this.id = id;
this.priviceNumber = priviceNumber;
this.priviceName = priviceName;
}
@Override
public String toString() {
return String.format("Province{id=%d, priviceNumber='%s', priviceName='%s'}", id, priviceNumber, priviceName);
}
}
package com.dadi.entity;
import java.util.List;
/**
* 省下面的市(id,地级市编号,地级市名字)
*/
public class City {
private String id;
private String cityNumber;
private String cityName;
private Province province;
private List<County> list;
public City() {
}
public City(String id, String cityNumber, String cityName, Province province, List<County> list) {
this.id = id;
this.cityNumber = cityNumber;
this.cityName = cityName;
this.province = province;
this.list = list;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCityNumber() {
return cityNumber;
}
public void setCityNumber(String cityNumber) {
this.cityNumber = cityNumber;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
public Province getProvince() {
return province;
}
public void setProvince(Province province) {
this.province = province;
}
public List<County> getList() {
return list;
}
public void setList(List<County> list) {
this.list = list;
}
@Override
public String toString() {
return String.format("City{id='%s', cityNumber='%s', cityName='%s', province=%s, list=%s}", id, cityNumber, cityName, province, list);
}
}
package com.dadi.entity;
/**
* 县、区(id、编号,名字)
*/
public class County {
private String id;
private String countyNumber;
private String countyName;
public County(String id, String countyNumber, String countyName) {
this.id = id;
this.countyNumber = countyNumber;
this.countyName = countyName;
}
public County() {
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCountyNumber() {
return countyNumber;
}
public void setCountyNumber(String countyNumber) {
this.countyNumber = countyNumber;
}
public String getCountyName() {
return countyName;
}
public void setCountyName(String countyName) {
this.countyName = countyName;
}
@Override
public String toString() {
return String.format("County{id='%s', countyNumber='%s', countyName='%s'}", id, countyNumber, countyName);
}
}
二、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:p="http://www.springframework.org/schema/p" xmlns:unit="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.xsd"> <!-- 通过属性或属性的set方法为对象赋值 --> <bean id="provinceHeiNan" class="com.dadi.entity.Province"> <property name="id" value="1"></property> <property name="priviceName" value="河南省"></property> <property name="priviceNumber" value="41"></property> </bean> <!-- 通过构造器注入属性 --> <bean id="provinceHeiBei" class="com.dadi.entity.Province"> <!-- 对象中必须有这个带参的构造方法 --> <constructor-arg name="id" value="2"></constructor-arg> <constructor-arg name="priviceName" value="河北省"></constructor-arg> <constructor-arg name="priviceNumber" value="13"></constructor-arg> </bean> <!-- 通过p标签为对象的属性赋值 --> <bean id="provinceShanDong" class="com.dadi.entity.Province" p:id="3" p:priviceName="山东省" p:priviceNumber="37"></bean> <bean id="cityShiJiaZhuang" class="com.dadi.entity.City"> <property name="id" value="1"></property> <property name="cityName" value="石家庄"></property> <property name="cityNumber" value="050000"></property> <!-- 通过ref属性指定前属性的值指向那一个bean --> <property name="province" ref="provinceHeiBei"></property> </bean> <bean id="cityTangShan" class="com.dadi.entity.City"> <property name="id" value="2"></property> <property name="cityName" value="唐山"></property> <property name="cityNumber" value="063000"></property> <!-- 通过匿名内部类为定前属性的值指定一个bean --> <property name="province"> <bean class="com.dadi.entity.Province"> <constructor-arg name="id" value="2"></constructor-arg> <constructor-arg name="priviceName" value="河北省"></constructor-arg> <constructor-arg name="priviceNumber" value="13"></constructor-arg> </bean> </property> </bean> <!-- 为对象指定list集合 --> <bean id="country" class="com.dadi.entity.County" p:id="1" p:countyName="路北区" p:countyNumber="063000"></bean> <bean id="country2" class="com.dadi.entity.County" p:id="1" p:countyName="路南区" p:countyNumber="063000"></bean> <unit:list id="countries"> <ref bean="country"></ref> <ref bean="country2"></ref> </unit:list> <bean id="cityTangShan2" class="com.dadi.entity.City"> <property name="id" value="2"></property> <property name="cityName" value="唐山"></property> <property name="cityNumber" value="063000"></property> <!-- 通过匿名内部类为定前属性的值指定一个bean --> <property name="province" ref="provinceHeiBei"></property> <!--<property name="list"> <list> <ref bean="country"/> <ref bean="country2"/> </list> </property> --> <!-- 也可以用unit在外面定义一个集合使用 --> <property name="list" ref="countries"></property> </bean> <!-- bean 的配置能够继承,使用 parent 来完成继承 --> <bean id="cityTangShan3" parent="cityTangShan2" p:cityName="唐山bean继承实例"></bean> </beans>
bean各参数的说明如下:
id指定配置的bean的名字,在IOC容器中是唯一的,如果在匹配找的时候有多个匹配的id的名字,就会出错;class指定bean在包中的具体的位置;
property 配置对象属性的值,name对象的属性的名字(匹配到属性的名字或着属性set的名字),value为对象的属性赋值,ref是为属性引用其它bean的值。
constructor-arag是用构造方法为对象属性赋值,要使用构造器的时候,对象必须有有参的构造方法。
parent是继承其它的bean,和JAVA中的extends关键字是一样的;
p: 是采用p命名空间来为对象的属性赋值,p后面跟上具体的属性的名字;
list:为对象的属性的集合赋值,可以对象里面直接赋值,也可以用spring unit命名空间,把所有的list封装成一个bean,在使用ref来引用 ;
map参考list的使用。
三、测试用例
@Test
public void bean() {
// 1.加载spring配置文件
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-bean.xml");
Province province = null;
City city = null;
// 通过属性为对象赋值
province = (Province) ac.getBean("provinceHeiNan");
System.out.println(province.toString());
// 通过构造器为对象赋值
province = (Province) ac.getBean("provinceHeiBei");
System.out.println(province.toString());
// 通过p标签为对象赋值
province = (Province) ac.getBean("provinceShanDong");
System.out.println(province.toString());
// 通过ref标签为对象引用另一个对象赋值
city = (City) ac.getBean("cityShiJiaZhuang");
System.out.println(city.toString());
// 通过内部bean,也就是匿名内部类为对象引用一个对象赋值
city = (City) ac.getBean("cityTangShan");
System.out.println(city.toString());
// 为对象指定list集合
city = (City) ac.getBean("cityTangShan2");
System.out.println(city.toString());
// bean的继承
city = (City) ac.getBean("cityTangShan3");
System.out.println(city.toString());
}