首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring Bean 繼承與內部 Bean 注入詳解

     編輯:Java 相關知識

Bean 定義繼承

子 Bean 定義可繼承父 Bean 的配置屬性(構造參數、屬性值、初始化方法等),並可覆蓋或新增屬性。類似 Java 類繼承,但作用於配置元數據層面。

XML 配置範例

<bean id="helloWorld" class="com.yiibai.HelloWorld">
    <property name="message1" value="Hello World!"/>
    <property name="message2" value="Hello Second World!"/>
</bean>

<bean id="helloIndia" class="com.yiibai.HelloIndia" parent="helloWorld">
    <property name="message1" value="Hello India!"/> <!-- 覆蓋 -->
    <property name="message3" value="Namaste India!"/> <!-- 新增 -->
</bean>

子 Bean helloIndia 自動繼承 message2,無需重複配置。

Bean 定義模板

設置 abstract="true" 且不指定 class,純作為模板:

<bean id="beanTemplate" abstract="true">
    <property name="message1" value="Hello World!"/>
    <property name="message2" value="Hello Second World!"/>
</bean>

<bean id="helloIndia" class="com.yiibai.HelloIndia" parent="beanTemplate">
    <property name="message1" value="Hello India!"/>
</bean>

內部 Bean 注入

在 <property/> 或 <constructor-arg/> 內部直接定義 <bean/>,稱為內部 Bean。屬於外部 Bean 專屬,無需單獨 ID。

Setter 注入內部 Bean

<bean id="textEditor" class="com.yiibai.TextEditor">
    <property name="spellChecker">
        <bean id="spellChecker" class="com.yiibai.SpellChecker"/>
    </property>
</bean>

構造器注入內部 Bean

<bean id="outerBean" class="com.example.Outer">
    <constructor-arg>
        <bean class="com.example.Inner"/>
    </constructor-arg>
</bean>

完整示例:文本編輯器與拼寫檢查器

// TextEditor.java
public class TextEditor {
    private SpellChecker spellChecker;
    public void setSpellChecker(SpellChecker sc) { this.spellChecker = sc; }
    public void spellCheck() { spellChecker.checkSpelling(); }
}

// SpellChecker.java
public class SpellChecker {
    public SpellChecker() { System.out.println("Inside SpellChecker constructor."); }
    public void checkSpelling() { System.out.println("Inside checkSpelling."); }
}

// beans.xml (內部 Bean)
<bean id="textEditor" class="com.yiibai.TextEditor">
    <property name="spellChecker">
        <bean class="com.yiibai.SpellChecker"/>
    </property>
</bean>

輸出:

Inside SpellChecker constructor.
Inside setSpellChecker.
Inside checkSpelling.

總結

  • Bean 繼承減少重複配置,提高維護性。
  • 抽象 Bean 模板適合提取公共屬性。
  • 內部 Bean 封裝性強,適用於單一引用場景。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved