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

Struts + Spring + iBatis 輕量級 J2EE 開發實戰:以 JPetStore 4.0 為例

     編輯:Java 程式設計入門

前言:企業級應用整合的三大核心挑戰

多數 IT 組織在發展過程中,都必須直面三大核心課題:降低運營成本、拓展並留住客戶、提升業務流轉效率。要破解這些難題,關鍵在於實現多業務系統間數據與邏輯的無縫互通,亦即導入系統整合工程,打通業務流程,實現數據的共享與訪問。

JPetStore 4.0:優雅的輕量級參考架構

JPetStore 4.0 是 iBatis 官方發布的最新示例專案,基於 Struts MVC 框架(採用非傳統開發模式),以 iBatis 作為持久層。其設計層次分明、結構優雅,不僅是學習的佳作,更可作為高效開發模型的參考藍本。本文即在此之上,引入 Spring 對中間業務層進行改造,旨在進一步減少開發工作量,同時引入 Spring 的依賴注入、AOP 事務管理等核心優勢。

關鍵技術棧回顧

  • Struts:歷經五年沉澱,穩佔 Java Web MVC 霸主地位。雖面臨 Spring MVC、WebWork 等新貴挑戰,但在產品級開發中仍是最穩妥選擇。JPetStore 4.0 擺脫傳統用法,僅用一個通用 BeanAction 配合反射機制,並重新定義 Form Bean 使其具備業務行為(近似 BO),大幅簡化編程模型。
  • Spring Framework:源自《Expert One-on-One J2EE Design and Development》設計哲學,涵蓋 AOP、ORM、Context 等模組。本文重點利用 BeanFactory 解耦介面與實現,並以 AOP 實現聲明式事務管理。
  • iBatis:強大的 SQL Map 工具,將 SQL 直接映射到 Java 對象,保留 SQL 控制權,犧牲部分可移植性換取設計自由度。配合代碼生成工具可大幅降低樣板代碼量。

JPetStore 4.0 架構深度剖析

非傳統 Struts 實現:BeanAction 與智能 Form Bean

專案中唯一的 Struts Action 是 BeanAction,它利用反射根據 URL 動態調用 Form Bean 的對應方法。Form Bean 不再只是數據承載體,還封裝了業務行為(方法簽名簡單,返回 forward 名稱字符串),並透過 ActionContext 工具類與表現層框架解耦。這種模式極大降低了對 Struts 的耦合,便於未來遷移至 JSF 或 Spring MVC。

分層架構與代碼組織

  • 表現層:com.ibatis.jpetstore.presentation 下的 Form Bean(繼承 BaseBean),負責數據綁定、校驗及業務調用。
  • 業務層:com.ibatis.jpetstore.service 下的 Service 類,封裝業務邏輯與事務控制;persistence.iface 定義 DAO 介面,DaoConfig 作為工廠獲取具體實現。
  • 持久層:persistence.sqlmapdao 實現 DAO 介面,繼承 BaseSqlMapDao(再繼承 iBatis SqlMapDaoTemplate),SQL 映射文件置於 sql 目錄。
  • 領域層:domain 包下的 POJO,作為 DTO 貫穿各層。

Spring 改造實戰:三步走策略

1. Spring Context 載入:自定義 BeanFactory 替代 Plug-in

為保留 BeanAction 這一精華不動控制層,本文放棄 ContextLoaderPlugIn,改用自定義 CustomBeanFactory 封裝 XmlBeanFactory,一次性載入 applicationContext.xml,供表現層 Form Bean 通過 getBean() 獲取 Service。因 Form Bean 由 Struts 自動實例化,無法交由 Spring 管理,故需此橋接類實現「耦合 1」解耦。

2. 表現層微調:面向介面編程

Form Bean 原以單例工廠獲取 Service,改為 CustomBeanFactory.getBean("AccountService")。雖多引入一個工廠類,但實現了面向介面編程(Service 實現類在 Spring 配置中指定),且工廠類極簡,得益於 Spring 核心 DI 容器的反射機制。

3. 持久層遷移:擁抱 Spring JDBC 支持

  • 修改 BaseSqlMapDao 繼承 Spring SqlMapClientDaoSupport,引入 SqlMapClientTemplate 執行操作。
  • DAO 實現類委託 smcTemplate 執行查詢/更新,方法簽名不變,僅替換實現體,極易批量修改。
  • 移除原 DaoConfig 工廠類及 dao.xml,改由 Spring 管理 DAO 生命週期。
  • 在 applicationContext.xml 配置數據源、sqlMapClient、事務管理器及各 DAO Bean,實現統一資源管理。

4. 業務層重構:聲明式事務與依賴注入

以 OrderService 為例,在 Spring 配置中使用 TransactionProxyFactoryBean 代理目標 Bean,注入 ItemDao、OrderDao、SequenceDao,並聲明 insert* 方法需 PROPAGATION_REQUIRED 事務。業務類僅保留屬性及 Setter,構造函數置空,移除手動事務代碼(daoManager.startTransaction() 等),邏輯大幅精簡。

結語:輕量級架構的最佳平衡點

iBatis 賦予 SQL 完全控制權,JPetStore 4.0 融合最佳實踐與設計模式,是輕量級 J2EE Web 應用的優秀起點。本文在最大程度保留原有設計精華、最小代碼變動前提下,引入 Spring 管理業務與持久層,帶來:自然的面向介面編程、依賴注入解耦、統一數據訪問框架、聲明式事務、集中式配置。Spring 模塊化、分層架構讓開發者可按需選用,正如本文所示——只用核心容器與 AOP,輕量而強大。

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