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

Spring 管理 Struts 2 Action 完整配置指南:從基礎整合到 AOP 全托管

     編輯:Java 相關知識

三種整合層次,按需選擇

層次 1:Spring 僅負責創建與注入 (Struts 管理生命周期)

配置:

<!-- struts.xml -->
<constant name="struts.objectFactory" value="spring" />

<!-- 或 struts.properties -->
struts.objectFactory=spring

Action 映射:

<action name="user" class="com.myapp.admin.web.action.user.UserAction">...</action>

特點:Spring 以 prototype 作用域為每個請求創建新 Action 實例,依賴自動注入。Struts 仍控制生命周期。

層次 2:Spring 完全托管 Action (支持 AOP、事務、安全)

Spring 配置 (applicationContext.xml):

<bean id="userAction" class="com.myapp.web.action.user.UserAction" scope="prototype">
    <property name="userService" ref="userService"/>
</bean>

Struts 映射引用 Bean ID:

<action name="user" class="userAction">...</action>

⚠️ 致命陷阱:單例 vs 原型

Spring 默認 scope="singleton",而 Action 通常有狀態 (持有表單數據)。必須顯式聲明 scope="prototype",否則多線程並發時表單數據相互覆蓋,導致嚴重線程安全問題。

對比總結表

維度層次 1 (Struts 生命周期)層次 2 (Spring 全托管)
Action 作用域 Spring 強制 prototype 手動配置 prototype (易忘)
AOP 支持 無 完整支持 (事務、日誌、權限)
Acegi/Spring Security 受限 無縫整合
配置複雜度 低 中 (需雙邊配置)
適用場景 簡單 CRUD、無橫切關注點 需聲明式事務、切面、安全控制

最佳實踐建議

  1. 新項目優先層次 2:統一由 Spring 容器管理所有組件,架構清晰
  2. Action 定義為 prototype:在 Spring 配置中強制指定,或使用 @Scope("prototype") 註解
  3. 業務邏輯下沉 Service 層:Action 僅做參數綁定/結果跳轉,Service 為 singleton 承載核心邏輯
  4. 避免在 Action 注入有狀態 Bean:如 Hibernate Session、JDBC Connection 等非線程安全對象

遷移提示:Struts 2.5+ 推薦使用 Convention Plugin 零配置,配合 Spring @Component 掃描,可完全省略 struts.xml 中的 action 映射。

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