版本定位
Spring Web Flow 2.0 作為 Spring 子項目,專注解決跨請求、有狀態、用戶-服務器交互問題。相較 1.x 版本,架構定位發生根本變化。
六大核心新特性
1. 深度整合 Spring MVC(架構重心轉移)
- 1.x:獨立框架,可整合 Struts/JSF/MVC
- 2.0:明確定位為 Spring Web MVC 擴展,共享容器、視圖解析、攔截器
2. 原生 Ajax 事件處理
- Ajax 請求映射為 Flow 事件(
_eventId)
- 服務端處理後返回片段響應,客戶端局部刷新
- 無需額外控制器,復用 Flow 狀態管理
3. JSF 整合增強
- 通過層層包裝,在 Spring 容器中使用 JSF 組件
- Flow 管理 JSF 生命周期,解決作用域衝突
4. Spring Security (原 Acegi) 無縫整合
- Flow 級安全聲明:
<secured attributes="ROLE_USER"/>
- 自動攔截流程啟動、事件觸發、狀態轉換
- 基於角色/權限的精細訪問控制
5. 配置簡化 50%
- 官方測試:同等 Flow,XML 配置量減半
- 命名空間優化、默認約定、減少樣板代碼
6. 流程復用機制增強
- Flow 繼承:
<flow parent="baseFlow">
- State 繼承與覆蓋
- Subflow 調用如同函數調用
遷移影響
| 維度 | 1.x | 2.0 |
| 核心依賴 | spring-webflow.jar | spring-webflow-2.0.jar + spring-mvc |
| 配置文件 | 獨立 flow-engine 配置 | 整合至 Spring MVC 配置 |
| 視圖解析 | 內建 ViewSelector | 委派 Spring MVC ViewResolver |
| 擴展點 | FlowExecutionListener | Spring MVC 攔截器 + FlowListener |
適用性評估
適用:複雜向導、審批流程、多步驟表單、購物結算
不適用:簡單 CRUD、REST API、高併發無狀態服務