2004 年,Java 世界發生了結構性變革。JDK 躍升至 1.5 (5.0),引入泛型、註解、枚舉、自動裝箱、增強 for 循環、靜態導入、可變參數等語法糖,極大提升表達力。更關鍵的是,**四大架構級概念**—— **IOC (控制反轉)、AOP (面向切面程式設計)、SOA (面向服務架構)、MDA (模型驅動架構)** —— 正式進入主流視野,重塑了企業級開發的思想版圖。本文回顧這場變革的技術脈絡與歷史啟示。
java.util.concurrent — AQS、執行緒池、併發集合、鎖、原子類、Future/Callable,結束手寫同步工具時代。遺憾:註解處理 API (APT) 尚未標準化 (JSR 269 於 JDK 6 才標準),導致早期框架 (XDoclet) 依賴原始碼生成而非編譯期處理。
| 框架 | 定位 | 核心創新 | 2004 狀態 |
|---|---|---|---|
| Struts 1.x | Model 2 (MVC) 事實標準 | ActionForm 表單封裝、標籤庫替代 JSP 腳本、聲明式導航 (struts-config.xml) | **市場佔有率最高**,成熟穩定,但 ActionForm 耦合 Servlet API、單 Action 多職責、配置繁瑣 |
| JSF (JSR 127) | 官方標準組件框架 | 組件樹、事件模型、驗證/轉換、渲染器分離、工具友善 (視覺化設計) | **剛發布 1.0/1.1**,生態未成熟,強依賴 IDE 工具 (Sun Java Studio Creator),學習曲線陡峭 |
| Tapestry | 組件導向、無狀態、高效能 | HTML 模板純標記、組件對象模型、字節碼增強 (Hivemind IoC)、極低 Session 佔用 | 小眾精英選擇,架構超前但文檔匱乏 |
| WebWork (Struts 2 前身) | Action 導向、攔截器鏈、OGNL 表達式 | Action 即模型 (無 Form Bean)、攔截器橫切關注點、OGNL 強大綁定 | 新星崛起,後與 Struts 合併為 Struts 2 |
BeanFactory/ApplicationContext 管理 Bean 生命週期、作用域、AOP 代理。applicationContext.xml) 為主,支援屬性注入、建構子注入、自動裝配。@AspectJ 註解風格,結合 JDK 5 註解,結束擴展關鍵字時代,支援編譯期織入 (CTW) 與載入期織入 (LTW)。@Transactional 宣告式事務、安全、日誌、快取等橫切關注點。**不支援欄位攔截、建構子攔截、final 方法**,但覆蓋 90% 企業應用場景。背景:EJB 2.x 達到組件重用極限,**如何跨系統、跨語言、跨組織重用業務能力?** IBM、BEA、Oracle、Sun 推動 **Web Services (SOAP/WSDL/UDDI)** 標準化,企業服務匯流排 (ESB) 概念成型。核心:服務契約優先、鬆耦合、粗粒度、自治、可組合。2004 年處於 **Web Services 炒作週期高峰**,實際落地多為內部系統集成 (EAI 替代)。
願景:**PIM (Platform Independent Model) → PSM (Platform Specific Model) → Code**,透過模型轉換 (QVT) 實現業務邏輯與技術平台分離。工具:Together, Rational Rose, OptimalJ, AndroMDA。2004 年:**理想豐滿,現實骨感** — 模型複雜度、轉換規則維護成本、開發者抗拒、圖形化建模效率低,最終未成主流,但啟發了後來的**低代碼/無代碼平台**、**領域特定語言 (DSL)**、**代碼生成器 (JHipster, Telosys)**。
Session 管理模式深入人心。2004 年是 Java 企業級開發的**分水嶺**:語言現代化 (JDK 5)、輕量級容器掌權 (Spring)、AOP 普及、ORM 事實標準確立、SOA/MDA 戰略佈局。二十一年過去,技術棧換了幾輪 (Spring Boot, Cloud, Kubernetes, GraalVM, Virtual Threads),但**核心架構哲學 (IOC/DI, AOP, POJO, 契約優先, 關注點分離) 從未改變**。理解歷史,是為了在下一輪浪潮中識別不變的本質。