SPRing 是一個開源框架,是為了解決企業應用程序開發復雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構答應您選擇使用哪一個組件,同時為 J2EE 應用程序開發提供集成的框架。
在這篇由三部分組成的 Spring 系列 的第 1 部分中,我將介紹 Spring 框架。我先從框架底層模型的角度描述該框架的功能,然后將討論兩個最有趣的模塊:Spring 面向方面編程(AOP)和控制反轉 (IOC) 容器。接著將使用幾個示例演示 IOC 容器在典型應用程序用例場景中的應用情況。這些示例還將成為本系列后面部分進行的展開式討論的基礎,在本文的后面部分,將介紹 Spring 框架通過 Spring AOP 實現 AOP 構造的方式。
Spring 框架
Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。Spring 模塊構建在核心容器之上,核心容器定義了創建、配置和治理 bean 的方式,如圖 1 所示。
圖 1. Spring 框架的 7 個模塊
組成 Spring 框架的每個模塊(或組件)都可以單獨存在,或者與其他一個或多個模塊聯合實現。每個模塊的功能如下:
☆ 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC) 模式將應用程序的配置和依靠性規范與實際的應用程序代碼分開。
☆ Spring 上下文:Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和調度功能。
☆ Spring AOP:通過配置治理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。所以,可以很輕易地使 Spring 框架治理的任何對象支持 AOP。Spring AOP 模塊為基于 Spring 的應用程序中的對象提供了事務治理服務。通過使用 Spring AOP,不用依靠 EJB 組件,就可以將聲明性事務治理集成到應用程序中。
☆ Spring DAO:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來治理異常處理和不同數據庫供給商拋出的錯誤消息。異常層次結構簡化了錯誤處理,并且極大地降低了需要編寫的異常代碼數量(例如打開和關閉連接)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。
☆ Spring ORM:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。
☆ Spring Web 模塊:Web 上下文模塊建立在應用程序上下文模塊之上,為基于 Web 的應用程序提供了上下文。所以,Spring 框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。
☆ Spring MVC 框架:MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。通過策略接口,MVC 框架變成為高度可配置的,MVC 容納了大量視圖技術,其中包括 jsp、Velocity、Tiles、iText 和 POI。
public String getUrl(); public void setUrl(String url); public void linkCreditBankAccount() throws Exception ;
}
信用鏈接接口將信用歷史信息與銀行信息(假如需要的話)連接在一起,并插入用戶的信用卡信息。信用鏈接接口是一個遠程服務,它的查詢是通過 getUrl() 方法進行的。URL 由 Spring 框架的 bean 配置機制設置,我稍后會討論它。該接口的實現是由 CreditLinking 類提供的。
清單 5. EmailInterface
public interface EmailInterface {
public void sendEmail(ICustomer iCustomer); public String getFromEmail(); public void setFromEmail(String fromEmail) ; public String getPassWord(); public void setPassword(String password) ; public String getSmtpHost() ; public void setSmtpHost(String smtpHost); public String getUserId() ; public void setUserId(String userId);