在 Spring 專案中,當多個 Bean 共享相同配置屬性時,重複定義不僅冗餘還難以維護。本文通過實例演示如何使用 parent 屬性與抽象 Bean 實現配置復用。
假設有四個 Bean:Bean1 依賴 Bean2、Bean3、Bean4。其中 Bean2 和 Bean3 都擁有 id 和 name 兩個相同屬性:
<bean id="bean2" class="com.dwr.spring.bean.Bean2">
<property name="id" value="1"/>
<property name="name" value="Jack"/>
<property name="password" value="123456"/>
</bean>
<bean id="bean3" class="com.dwr.spring.bean.Bean3">
<property name="id" value="1"/>
<property name="name" value="Jack"/>
</bean>
將公共屬性提取到一個抽象 Bean 中,子 Bean 通過 parent 屬性繼承:
<!-- 定義抽象父 Bean,abstract="true" 表示不會實例化 -->
<bean id="beanAbstract" abstract="true">
<property name="id" value="1"/>
<property name="name" value="Jack"/>
</bean>
<!-- 子 Bean 繼承父 Bean 配置 -->
<bean id="bean2" class="com.dwr.spring.bean.Bean2" parent="beanAbstract">
<property name="password" value="123456"/> <!-- 僅定義差異屬性 -->
</bean>
<bean id="bean3" class="com.dwr.spring.bean.Bean3" parent="beanAbstract"></bean>
class,子 Bean 必須指定property 覆蓋父 Bean 的值(如需不同的 name)這種「模板模式」在 Spring XML 配置中極為實用,特別是大量相似 Bean(如多数據源、多服務客戶端)場景下,能顯著降低維護成本。