Spring支持继承,可以分为类继承和属性继承
1. 类继承
Spring属性:
(1)abstract: 如果设置为true,表示定义的bean是抽象的,告诉spring不要实例化这个bean;
问题:必须是抽象类么?可以不是抽象类么?
(2)parent: 指明bean的id,对bean的作用,相当于extends对于java类的作用;
场景:有三个Bean:
<bean id = "bean1" class = "……TestBean">
<property name="sex" value="male"/>
</bean>
<bean id = "bean2" class = "……TestBean">
<property name="sex" value="male"/>
</bean>
<bean id = "bean3" class = "……TestBean">
<property name="sex" value="female"/>
</bean>
修改:定义spring 父bean
<bean id ="BaseBean" class ="……TestBean">
<property name="sex" value="male"/>
</bean>
定义子Bean
<bean id ="bean1" parent = "BaseBean"/> 继承父Bean的属性
<bean id ="bean2" parent = "BaseBean"/>
<bean id ="bean3" parent = "BaseBean"> 覆盖父Bean的属性
<property name="sex" value="female"/>
</bean>
子bean可以继承父Bean的属性,也可以覆盖父Bean的属性
2. 属性继承
几个不同Bean之间存在相同的属性,可以抽离出来
场景:
<bean id = "bean1" class = "……ATestBean">
<property name="sex" value="male"/>
<property name="task" ref="task"/>
</bean>
<bean id = "bean2" class = "……BTestBean">
<property name="sex" value="male"/>
</bean>
修改:(1) 抽取公共属性
<bean id = "baseSex" abstract="true">
<property name="sex" value="male"/>
</bean>
(2)bean修改
<bean id = "bean1" class = "……ATestBean" parent="baseSex">
<property name="task" ref="task"/>
</bean>
<bean id = "bean2" class = "……BTestBean" parent="baseSex"/>
这里bean同时有parent和class属性,其中parent指向的baseSex,就是为了让不同Bean之间共享相同的属性值;在TransactionProxyFactoryBean声明业务时,Bean属性继承能够明显的减少冗余的xml配置。