第五章第四节-bean的关系

        首先按照HelloWorld的方式创建一个普通的java工程,引入的jar与HelloWorld的一样。先简单介绍一下项目中涉及到内容。两个bean类,其中House是Person的成员。一个MainTest测试类。一个spring.xml配置文件。末尾有完整的代码。

一、引用Bean

        关于两个bean类和MainTest类不再做介绍,详细查看后面的完整代码。这里重点介绍配置文件的内容。

        第一个是关于引用bean的。在下面的配置示例中,person通过ref引用了一个id为house的bean,那么在初始化person时会将house注入到person的成员变量中去。

        这种引用的方式是支持级联属性配置,也就是说,可以在引用house之后在person中单独设置house的属性,如案例中house.area一样。

        配置中有一个注释的<null/>,它表示为house赋一个null的空值,一般默认没有给引用赋值的也是空值。

 

<!-- 引用Bean -->
	<bean id="person" class="com.escore.beans.Person">
		<property name="name" value="齐天大圣"></property>
		<property name="house" ref="house"></property>
		<property name="house.area" value="200"></property>
		<!-- 设置引用类型的null值,一般不设置默认也是null。
			<property name="house"><null/></property> 
		-->
	</bean>
	<bean id="house" class="com.escore.beans.House">
		<property name="hName" value="水帘洞"></property>
	</bean>

二、内部bean
        关于内部bean比较简单,就是在一个bean属性的内部,创建其成员变量的bean。如实例中创建的house,需要注意的是内部bean不需要id属性,它是不能被外面所访问到的。

 

 

	<bean id="person2" class="com.escore.beans.Person">
		<property name="name" value="托塔李天王"></property>
		<property name="house">
			<bean class="com.escore.beans.House">
				<property name="hName" value="玲珑宝塔"></property>
				<property name="area" value="8"></property>
			</bean>
		</property>
	</bean>

三、继承bean

         继承bean是通过parent属性指向一个bean的id,即可以继承parent类的属性,而且子类不需要在添加class属性。

         子类也可以再赋予自己的值来覆盖父类的复制。

         子类也可以添加class属性,但是class必须是父类或者父类的子类才行。如果子类有额外的属性也可以再赋值。

	<bean id="person3" class="com.escore.beans.Person">
		<property name="name" value="雨蛙娘娘"></property>
		<property name="house" ref="house"></property>
	</bean>
	<bean id="person4" parent="person3">
		<property name="name" value="亚当"></property>
	</bean>

四、继承抽象bean

 

         抽象bean是将abstract属性设为true,抽象的bean是不能被实例化的。class属性也可以不写,但是继承它的子类必须写(如果抽象类注明了class,子类也可以不写)。其他的特性与继承普通的bean一样。

 

	<bean id="person5" 
		abstract="true">
		<property name="name" value="name"></property>
		<property name="house">
			<bean class="com.escore.beans.House">
				<property name="hName" value="houseName"></property>
				<property name="area" value="0"></property>
			</bean>
		</property>
	</bean>
	<bean id="person6" class="com.escore.beans.Person" parent="person5">
		<property name="name" value="夏娃"></property>
	</bean>

五、依赖bean

 

        使用depends-on设置依赖的bean的id,如果需要设置多个依赖可以使用逗号、空格的方式。但是依赖的bean不能是抽象的bean。

        设置的依赖属性,只有依赖作用个。不管所依赖的那个bean是否为本类自己的成员,都不会将依赖的备案注入到自己的属性中。

 

<!-- 依赖bean:使用depends-on设置依赖的前置bean。
			-如果前置依赖于多个 Bean,则可以通过逗号,空格或的方式配置 Bean 的名称
		  	-使用depends-on属性关联依赖的bean,不能关联抽象的bean。
		  	-只是依赖作用,该类有没有所依赖的对象的成员都无关,即使有也不会为其初始化。
	 -->
	<bean id="person7" class="com.escore.beans.Person"
		depends-on="house2">
	</bean>
	<bean id="house2" class="com.escore.beans.House">
		<property name="hName" value="安置房"></property>
		<property name="area" value="50"></property>
	</bean>


-------------------------------本节涉及到的完整代码--------------------------------------------------
House.java

 

 

 

 

public class House {

	private String hName;
	private double area;

	public double getArea() {
		return area;
	}

	public void setArea(double area) {
		this.area = area;
	}

	public String gethName() {
		return hName;
	}

	public void sethName(String hName) {
		this.hName = hName;
	}

	@Override
	public String toString() {
		return "House [hName=" + hName + ", area=" + area + "]";
	}

}

Person.java

 

 

public class Person {

	private String name;

	private House house;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public House getHouse() {
		return house;
	}

	public void setHouse(House house) {
		this.house = house;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", house=" + house + "]";
	}

}

 

MainTest.java

import org.springframework.context.support.ClassPathXmlApplicationContext;
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("person6");
		
		System.out.println(person);
		
		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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 引用Bean -->
	<bean id="person" class="com.escore.beans.Person">
		<property name="name" value="齐天大圣"></property>
		<property name="house" ref="house"></property>
		<property name="house.area" value="200"></property>
		<!-- 设置引用类型的null值,一般不设置默认也是null。
			<property name="house"><null/></property> 
		-->
	</bean>
	<bean id="house" class="com.escore.beans.House">
		<property name="hName" value="水帘洞"></property>
	</bean>
	
	<!-- 内部Bean -->
	<bean id="person2" class="com.escore.beans.Person">
		<property name="name" value="托塔李天王"></property>
		<property name="house">
			<bean class="com.escore.beans.House">
				<property name="hName" value="玲珑宝塔"></property>
				<property name="area" value="8"></property>
			</bean>
		</property>
	</bean>
	
	<!-- 继承Bean: -->
	<bean id="person3" class="com.escore.beans.Person">
		<property name="name" value="雨蛙娘娘"></property>
		<property name="house" ref="house"></property>
	</bean>
	<bean id="person4" parent="person3" class="com.escore.beans.Man">
		<property name="name" value="亚当"></property>
		<property name="gender" value="male"></property>
	</bean>
	
	<!-- 继承抽象Bean	 -->
	<bean id="person5" 
		abstract="true">
		<property name="name" value="name"></property>
		<property name="house">
			<bean class="com.escore.beans.House">
				<property name="hName" value="houseName"></property>
				<property name="area" value="0"></property>
			</bean>
		</property>
	</bean>
	<bean id="person6" class="com.escore.beans.Person"  parent="person5">
		<property name="name" value="夏娃"></property>
	</bean>
	
	<!-- 依赖bean	 -->
	<bean id="person7" class="com.escore.beans.Person"
		depends-on="house2">
	</bean>
	<bean id="house2" class="com.escore.beans.House">
		<property name="hName" value="安置房"></property>
		<property name="area" value="50"></property>
	</bean>
</beans>

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值