<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> |
| 屬性 | 說明 | 默認值 |
|---|---|---|
| id | 唯一標識 (XML ID 規範) | 無 |
| name | 別名,多個用逗號/空格/分號分隔 | 無 |
| class | 全限定類名 (子 Bean 可省略) | 無 |
| parent | 父 Bean 名稱 (繼承配置) | 無 |
| abstract | true=僅作模板不實例化 | false |
| singleton | true=單例,false=原型 | true |
| lazy-init | true=延遲初始化,false=啟動時初始化,default=按容器默認 | default |
| autowire | byName/byType/constructor/autodetect/no/default | default |
| dependency-check | none/objects/simple/all/default | default |
| depends-on | 依賴的其他 Bean 名稱 (先初始化) | 無 |
| init-method | 初始化回調方法 (無參) | 無 |
| destroy-method | 銷毀回調方法 (無參,僅 singleton) | 無 |
| factory-method | 工廠方法名 (配合 factory-bean) | 無 |
| factory-bean | 工廠 Bean 名稱 (調用其 factory-method) | 無 |
singleton="true":容器啟動/首次獲取時創建單例,後續 getBean() 返回同一實例。singleton="false":每次 getBean() / 注入時創建新實例,適合有狀態 Bean。lazy-init="true" 延遲到首次使用時創建,加快啟動速度。byName:按屬性名匹配 Bean 名稱。byType:按屬性類型匹配 (唯一)。constructor:構造器參數 byType。autodetect:嘗試 constructor 失敗回退 byType。InitializingBean.afterPropertiesSet() / DisposableBean.destroy(),降低與 Spring API 耦合。@PostConstruct → afterPropertiesSet() → init-method。<bean id="myFactory" class="com.example.MyFactory"/>
<bean id="myService" factory-bean="myFactory" factory-method="createService"/>
此時 class 屬性失效,實例由工廠方法產生,適用於複雜構建邏輯、第三方庫對象納入容器管理。
熟練掌握 Bean 定義的繼承、集合注入、作用域、生命週期、自動裝配、工廠方法等屬性,能編寫清晰、可維護、高性能的 Spring XML 配置,也是面試高頻考點。