Spring Bean的父子继承主要是为了统一定义Spring Bean的公共属性、作业范围scope,并避免了冗余和修改的繁琐。
<beans>
<bean id="notify" class="twm.spring.start.NotifyServiceByCellPhoneImpl" />
<bean id="parent" abstract="true" class="example.ComplexObject">
<property name="notifyservice" ref="notify"/>
<property name="adminEmails">
<props>
<prop key="administrator">administrator@example.com</prop>
<prop key="support">support@example.com</prop>
</props>
</property>
</bean>
<bean id="child" parent="parent">
<property name="adminEmails">
<props merge="true">
<prop key="sales">sales@example.com</prop>
<prop key="support">support@example.co.uk</prop>
</props>
</property>
</bean>
<beans>
可以看到child bean无需声明class,它用parent声明了父对象,这样就继承了父对象的class声明,以及notifyservice属性值,adminEmails的值也会从父对象继承并合并。
如果父对象声明了属性abstract="true"
,则不能实例化,因为它是抽象的bean。容器内部的preInstantiateSingletons()方法会忽略抽象bean。在作为子bean的纯模板时,非常有用。