Spring_Bean之间的关系
Spring_Bean之间的关系:继承;依赖
继承Bean配置
Spring允许继承bean的配置,被继承的bean称为父bean,继承这个父Bean的Bean称为子Bean
子Bean从父Bean中继承配置,包括Bean的属性配置
子Bean也可以覆盖从父Bean继承过来的配置
配置文件:
<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="address" class="relation.Address" p:city="beijing" p:street="zhonghuajie"></bean> <!-- 这是常规的做法,属性赋值 <bean id="address1" class="relation.Address" p:city="beijing" p:street="qixingjie"></bean>--> <!-- <bean id="address1" parent="address"></bean> bean 配置的继承: 使用bean的parent 属性指定继承哪个bean的配置--> <!--<bean id="address1" p:city="leizhou" p:street="qixingjie" parent="address"></bean>--> <bean id="address1" parent="address" p:street="qixingjie"></bean> <!--子Bean也可以覆盖从父Bean继承过来的配置--> </beans>
父Bean可以作为配置模板,也可以作为Bean实例,若只想把父Bean作为模板,可以设置<bean>的abstract属性为true,这样Spring将不会实例化这个Bean
一个抽象bean: bean的abstract 属性为true的bean.这样的bean 不能被IOC容器实例化,只用来继承配置,若某一个bean的class属性没有指定,则该bean必须是一个抽象bean.
并不是<bean>元素里的所有属性都会被继承,比如:autowire,abstract等。
也可以忽略父Bean的class属性,让子Bean指定自己的类,而共享相同的属性配置,但此时abstracttrue 必须设为true.(这一点在Eclipse的话,可以实施。而在InterlliJ IDEA的话,就会报红。原因是Eclipse是隐形机制,而InterlliJ IDEA是要明确直指哪个类,要写出来才可以,不可以忽略)。
使用Eclipse时:
使用InterlliJ IDEA时:
依赖关系 用属性:depends-on来指明要依赖哪个bean.
注意,只是依赖而已,不是像p:car-ref可以把car这个bean装配到person这个bean的属性car中,所以到最后的输出car结果是null。只是依赖存在而已,若是carbean不存在,则person这个bean也是不存在的。
代码如下:
<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--也能够忽略父Bean的class属性,让子Bean指定自己的类,而共享同样的属性配置,但此时abstract必须设为true--> <bean id="address" class="relation.Address" p:city="beijing" p:street="zhonghuajie" abstract="true"/> <bean id="address1" class="relation.Address" p:city="beijing" p:street="zhonghuajie" parent="address"></bean> <bean id="car" class="relation.Car" p:name="benshi" p:num="1" p:color="red" p:price="100000.00"></bean> <!--要求再配置Person时,必须有一个关联的car!换句话说person 这个bean依赖Car这个bean--> <bean id="person" class="relation.Person" p:name="chen" p:age="23" p:address-ref="address1" depends-on="car"> </bean> </beans>
上一篇: 设计模式读书笔记(二)——类图