1.前言
不同的Bean之间存在两种关系:继承和依赖,这里的继承与java中的继承不同,它指的是配置上的继承。
2.继承bean配置
Spring允许继承bean的配置,被继承的bean成为父bean,继承这个父bean的Bean称为子bean,继承bean主要有以下几个特点:
2)子Bean也可以覆盖从父Bean继承过来的配置,如父bean设置name为zhangsan,子Bean中可以把name的值覆盖为Lisi.
3)父Bean可以作为配置模板,也可以作为Bean实例,若只想把父Bean作为模板,可以设置<bean>的abstract属性为true,这样Spring将不会实例化这个Bean并不是<bean>元素里的所有元素都会被继承,比如autowire,abstract等
4)也可以忽略父Bean的class属性,让子Bean指定自己的类,而共享相同的属性配置,但此时abstract必须设置为true。
5) 一个abstract属性为true的bean是不会被容器实例化的,它是一个抽象Bean。
具体配置文件:
1 <!--抽象bean不能被IOC容器实例化,只用来被继承配置 abstract="true",如果一个bean没有指定class那么它必须是一个抽象bean--> 2 <bean id="address" class="com.wzy.autowire.Address" p:city="BeiJing" p:street="HuangLongGuan" abstract="true"/> 3 4 <!--bean配置的继承:当两个bean的配置几乎一样,使用bean的parent属性继承哪个bean的配置--> 5 <bean id="address2" p:street="WuDaoKou" parent="address"/> 6 7 <bean id="car" class="com.wzy.autowire.Car" p:brand="AUDI" p:price="300000"/>
3.
具体配置文件:
1 <!--要求在配置Person时,必须有一个关联的car!换句话说person这个bean依赖于Car这个bean--> 2 <bean id="person" class="com.wzy.autowire.Person" p:address-ref="address2" p:name="wzy" depends-on="car"/>