J2EE 雖建立了企業級開發標準,但開發成本高、失敗率高,EJB 常成關鍵痛點。社群尋求更簡單方案,Spring Framework 應運而生。Spring 以 POJO 實現原本需 EJB 才能做到的功能,大幅簡化伺服器端開發,其核心正是 反向控制 與 面向切面編程 容器框架。IoC 透過依賴注入管理物件生命週期與關係;AOP 以攔截器實現聲明式企業級服務(安全、事務等)。兩者結合,構建出輕量、高效、可維護的 J2EE 架構。
傳統模式下,應用程式需自行創建依賴物件。IoC 將創建物件的職責交給容器,應用程式只需直接使用實例。Martin Fowler 提出「依賴注入」更精確描述此設計:組件間依賴關係由容器在運行期動態決定並注入。
以下步驟展示 Spring IoC 如何鬆耦合業務邏輯:
Action 介面與 execute 方法。UpperAction 實現介面,持有 message 屬性及存取器。bean.xml 中聲明 Bean 與屬性注入。
<beans>
<bean id="TheAction" class="net.chen.spring.qs.UpperAction">
<property name="message">
<value>HeLLo</value>
</property>
</bean>
</beans>
ApplicationContext 獲取 Bean 並調用。
ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");
Action a = (Action) ctx.getBean("TheAction");
System.out.println(a.execute("Rod Johnson")); // 輸出:HELLO ROD JOHNSON
若無 Spring,需自寫配置讀取類、工廠模式、單例管理、初始化回調等大量樣板碼,導致代碼膨脹、難維護。Spring IoC 優勢顯著:
系統服務(日誌、事務、安全)散落於各業務模組,造成代碼重複與業務邏輯混雜。AOP 將這些橫切關注點模組化為切面,聲明式應用於所需位置。核心術語:
Spring 實現 AOP 聯盟介面,支援四種通知類型。運行時代理 Bean,兩種代理方式:
java.lang.reflect.Proxy)。ProxyFactoryBean 快速構建。Spring IoC 降低組件耦合,提升可移植與重用;Spring AOP 以聲明式方式提供企業級服務,合理補足 OOP。兩者結合,使 Spring 成為成功的 J2EE 架構框架,EJB 不再是唯一選擇,Spring 已深入 J2EE 核心,引領開發方向。