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

Spring Bean 配置屬性詳解:parent 繼承、集合注入、作用域、生命週期與工廠方法

     編輯:Java 綜合教學

Bean 定義繼承:parent 屬性

<bean id="txProxyTemplate" abstract="true"
      class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager" ref="transactionManager"/>
    <property name="transactionAttributes">
        <props>
            <prop key="save*">PROPAGATION_REQUIRED</prop>
            <prop key="delete*">PROPAGATION_REQUIRED</prop>
        </props>
    </property>
</bean>

<bean id="carnetMgr" parent="txProxyTemplate">
    <property name="target">
        <bean class="ecustoms.carnet.app.biz.CarnetMgr">
            <property name="extensionHistoryDAO" ref="extensionHistoryDAO"/>
            <property name="stockTransactionDAO" ref="stockTransactionDAO"/>
        </bean>
    </property>
</bean>

子 Bean 繼承父 Bean 的配置 (屬性、構造器參數、init/destroy 方法等),可覆蓋或新增。父 Bean 通常設 abstract="true" 僅作模板。

集合類屬性注入

XML 元素對應 Java 類型示例
<list>List / Array<value>張三</value><value>李四</value>
<set>Set<value>唱歌</value><value>跳舞</value>
<map>Map<entry key="數學"><value>60</value></entry>
<props>Properties<prop key="身高">165</prop>

Bean 元素完整屬性表

屬性說明默認值
id唯一標識 (XML ID 規範)無
name別名,多個用逗號/空格/分號分隔無
class全限定類名 (子 Bean 可省略)無
parent父 Bean 名稱 (繼承配置)無
abstracttrue=僅作模板不實例化false
singletontrue=單例,false=原型true
lazy-inittrue=延遲初始化,false=啟動時初始化,default=按容器默認default
autowirebyName/byType/constructor/autodetect/no/defaultdefault
dependency-checknone/objects/simple/all/defaultdefault
depends-on依賴的其他 Bean 名稱 (先初始化)無
init-method初始化回調方法 (無參)無
destroy-method銷毀回調方法 (無參,僅 singleton)無
factory-method工廠方法名 (配合 factory-bean)無
factory-bean工廠 Bean 名稱 (調用其 factory-method)無

關鍵屬性深度解析

singleton vs prototype

  • singleton="true":容器啟動/首次獲取時創建單例,後續 getBean() 返回同一實例。
  • singleton="false":每次 getBean() / 注入時創建新實例,適合有狀態 Bean。

lazy-init

  • 單例 Bean 默認啟動時預實例化;設 lazy-init="true" 延遲到首次使用時創建,加快啟動速度。

autowire 自動裝配

  • byName:按屬性名匹配 Bean 名稱。
  • byType:按屬性類型匹配 (唯一)。
  • constructor:構造器參數 byType。
  • autodetect:嘗試 constructor 失敗回退 byType。

dependency-check 依賴檢查

  • 配合 autowire 使用,確保必需依賴已滿足,啟動時檢查而非運行時拋錯。

init-method / destroy-method

  • 替代 InitializingBean.afterPropertiesSet() / DisposableBean.destroy(),降低與 Spring API 耦合。
  • 調用順序:@PostConstruct → afterPropertiesSet() → init-method。

factory-bean + factory-method

<bean id="myFactory" class="com.example.MyFactory"/>
<bean id="myService" factory-bean="myFactory" factory-method="createService"/>

此時 class 屬性失效,實例由工廠方法產生,適用於複雜構建邏輯、第三方庫對象納入容器管理。

總結

熟練掌握 Bean 定義的繼承、集合注入、作用域、生命週期、自動裝配、工廠方法等屬性,能編寫清晰、可維護、高性能的 Spring XML 配置,也是面試高頻考點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved