Spring IOC&DI 配置bean及属性

版权声明:本文为博主原创文章,未经博主允许不得转载。 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());

	}


猜你喜欢

转载自blog.csdn.net/u010285684/article/details/80237122