Spring的整體架構--Spring源碼深度解析

前言:

  Spring 始於2003年,輕量級 Java 開源框架。

  Spring 是爲了解決企業應用開發的複雜性而創建的,它使用基本的 JavaBean 來完成以前只可能由 EJB 完成的事情。

  Spring 的用途不僅限於服務器端的開發,從簡單性、可測試性和松耦合的角度而言,任何 Java 應用都可以從 Spring 中受益。

Spring 的整體架構:

  Spring 框架是一個分層架構,被分爲大約20個模塊。

               

  (1)Core Container

    Core Container (核心容器)包含有 Beans、Core、Context、Expression language 模塊。

    Core 和 Beans 模塊是框架的基礎部分,提供 IOC(控制反轉)和依賴注入特性。這裏的基礎概念是 BeanFactory 。它提供對 Factory 模式的經典實現來消除對程序性單例模式的需要,並真正地允許你從程序邏輯中分離出依賴關係和配置。

    Core 模塊主要包含 Spring 框架基本部分的核心工具類,Spring 的其他組件要都要使用到這個包裏的類,Core 模塊是其他組件的基本核心。當然你也可以在自己的應用系統中使用這些工具類。

    Beans 模塊是所有應用都要用到的,它包含訪問配置文件、創建和管理 bean 以及進行 Inversion of Control / Dependency Injection(IOC/DI) 操作相關的所有類。

    Context 模塊構建於 Core 和 Beans 模塊基礎之上,提供了一種類似於 JNDI 註冊器的框架式的對象訪問方法。Context 模塊繼承了 Beans 的特性,爲 Spring 核心提供了大量擴展,添加了對國際化(例如資源綁定)、事件傳播、資源加載和對 Context 的透明創建的支持。Context 模塊同時也支持 J2EE 的一些特性,例如 EJB、JMX 和基礎的遠程處理。ApplicationContext 接口是 Context 模塊的關鍵。

    Expression Language 模塊提供了一個強大的表達式語言用於在運行時查詢和操縱對象,它是 JSP2.1 規範中定義的 Unifed expression Language 的一個擴展。該語言支持設置/獲取屬性的值,屬性的分配,方法的調用,訪問數組上下文(accessiong the context of arrays)、容器和索引器、邏輯和算術運算符、命名變量以及從 Spring 的IOC 容器中根據名稱檢索對象。它也支持 list 投影、選擇和一般的 list 聚合。

  (2)Data Access/Integration

    Data Access/Integration 層包含有 JDBC、ORM、OXM、JMS 和 Transaction 模塊。

    JDBC 模塊提供了一個 JDBC 抽象層,它可以消除冗長的 JDBC 編碼和解析數據庫廠商特有的錯誤代碼。這個模塊包含了 Spring 對 JDBC 數據訪問進行封裝的所有類。

    ORM 模塊爲流行的對象-關係映射 API。如 JPA、JDO、Hibernate、Ibatis 等,提供了一個交互層。利用 ORM 封裝包,可以混合使用所有 Spring 提供的特性進行O/R 映射。如簡單聲明性事務管理。

    Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關係工具,其中包括 JDO、Hibernate和IBatisSQL Map。所有這些都遵從 Spring 的通用事務和 Dao異常層次結構。

    OXM 模塊提供了一個對 Object/XML 影射實現的抽象層,Object/XML 映射實現包括 JAXB、Castor、XMLBeans、JiBX 和 XStream。

    JMS(Java Messaging Service)模塊主要包含了一些製造和消費消息的特性。

    Transaction 模塊支持編程和聲明性的事務管理,這些事務類必須實現特定的接口,並且對所有的 POJO 都適用。

  (3)Web

    Web 上下文模塊建立在應用程序上下文模塊之上,爲基於 Web 的應用程序提供了上下文。所以,Spring 框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工作。Web 層包含了 Web、Web-servlet、Web-struts 和 Web-Porlet 模塊。

    Web 模塊提供了基礎的面向 Web 的集成特性。例如,多文件上傳、使用 servlet listeners 初始化 IOC 容器以及一個面向 Web 的應用上下文。它還包含、spring 遠程支持中 Web 的相關部分。

    Web-Servlet 模塊 web.servlet.jar : 該模塊包含 Spring 的 model-view-controller(MVC)實現。Spring 的 MVC 框架使用模型範圍內的代碼和 web forms 之間能夠清楚地分離開來,並與Spring框架的其他特性集成在一起。

    Web-Struts 模塊提供了對 Struts 的支持,使得類在 Spring 應用中能夠與一個典型的 Struts Web 層集成在一起。注意,該支持在 Spring 3.0 中是 deprecated的。

    Web-Porlet 模塊提供了用於 Portlet 環境和 Web-Servlet 模塊的 MVC 的實現。

  (4)AOP

    AOP 模塊提供了一個符合 AOP 聯盟標準的面向切面編程的實現,它讓你可以定義例如方法攔截器和切點,從而將邏輯代碼分開,降低它們之間的耦合性。利用 source-level 的元數據功能,還可以將各種行爲信息合併到你的代碼中,這有點像 .Net 技術中的 attribute 概念。

    通過配置管理特性,Spring AOP 模塊直接將面向切面的編程功能集成到 Spring 框架中,所以可以很容易的使 Spring 框架管理的任何對象支持 AOP。 Spring AOP模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。通過使用 Spring AOP,不用依賴EJB組件,就可以將聲明性事務管理集成到應用程序中。

    Aspects 模塊提供了對 AspectJ 的繼承支持。

    Instrumentation 模塊提供了 class instrumentation 支持和 classloader 實現,使得可以在特定的應用服務器上使用。

  (5)Test

    Test 模塊支持使用 JUnit 和 TestNG 對 Spring 組件進行測試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章