1. 程式人生 > >Spring Bean在XML配置中的父子繼承

Spring Bean在XML配置中的父子繼承

與Java類的繼承相似,Spring框架也提供了Spring Bean的屬性的繼承。也就是說,有的Spring Bean是抽象的,可以被繼承;有的Spring Bean可以指定繼承的父Spring Bean。這時候,抽象的Spring Bean也可以被稱為模板,供定義具體的業務邏輯Spring Bean時使用。

這可以通過Spring框架的XML配置檔案實現,下面以兩個例子進行說明。

1.沒有實現類的抽象父Spring Bean

<bean id="inheritedTestBeanWithoutClass" abstract="true">
    <property name="name" value="parent"/>
    <property name="age" value="1"/>
</bean>

<bean id="inheritsWithClass" class="org.springframework.beans.DerivedTestBean" parent="inheritedTestBeanWithoutClass" init-method="initialize">
    <property name="name" value="override"/>
    <!-- age will inherit the value of 1 from the parent bean definition-->
</bean>

如程式碼所示,抽象父Spring Bean沒有對應的具體Java類,這時繼承的子Spring Bean必須對應一個實現類。

通常,被繼承的父Spring Bean必須使用屬性abstract="true"進行標識。繼承父Spring Bean的子Spring Bean,需要使用屬性parent="..."指定繼承的父Spring Bean。

此外,子Spring Bean可以補充定義新的屬性,也可以覆蓋父子Spring Bean定義的屬性。

2.有實現類的抽象父Spring Bean

<bean id="inheritedTestBean" abstract="true" class="org.springframework.beans.TestBean">
    <property name="name" value="parent"/>
    <property name="age" value="1"/>
</bean>

<bean id="inheritsWithDifferentClass" class="org.springframework.beans.DerivedTestBean" parent="inheritedTestBean" init-method="initialize">
    <property name="name" value="override"/>
    <!-- the age property value of 1 will be inherited from parent -->
</bean>

<bean id="inheritsWithSameClass" parent="inheritedTestBean" init-method="initialize">
    <property name="name" value="override"/>
    <!-- the age property value of 1 will be inherited from parent -->
</bean>

如程式碼所示,抽象父Spring Bean對應一個Java類,這時繼承的子Spring Bean可以有另外的Java類對應,也可以沒有對應的Java類。

Spring Bean的父子繼承主要是為了統一定義Spring Bean的公共屬性、作業範圍scope,並避免了冗餘和修改的繁瑣。