Spring的體系結構

陳俊成發表於2016-10-05

這裡寫圖片描述

這裡寫圖片描述

重要的模組介紹:
1、Core Container(核心容器)

  • Beans模組:提供BeanFactory,是工廠模式的經典實現,Spring將管理物件稱為Bean。
  • Core核心模組:提供了Spring框架的基本組成部分,包括Ioc(控制反轉)和DI(依賴注入)功能。
  • Context上下文模組:構建於Core封裝包基礎上的 Context封裝包,提供了一種框架式的物件訪問方法,有些象JNDI註冊器。Context封裝包的特性得自於Beans封裝包,並新增了對國際化(I18N)的支援(例如資源繫結),事件傳播,資源裝載的方式和Context的透明建立,比如說通過Servlet容器。

Spring的IoC容器
所謂的IoC是指在程式的設計中,例項不再由呼叫者來建立,而是由Spring容器來建立。Spring容器會負責控制程式之間的關係,而不是由程式程式碼直接控制,這樣控制權由應用程式碼轉移到了外部容器,控制權發生了反轉,也就是Spring的IoC思想。Spring為我們提供了兩種IoC容器,分別是BeanFactory和ApplicationContext。

(1)BeanFactory
BeanFactory由org.springframework.beans.factory.BeanFactory介面定義,提供完整的IoC服務支援。它負責初始化各種Bean,並呼叫它們的宣告週期方法。他有多個實現子類比如XmlBeanFactory

(2)ApplicationContext
ApplicationContext是BeanFactory的子介面,也被稱為應用上下文,由org.springframework.context.ApplicationContext定義,它不僅提供BeanFactory所有的功能,還以一種更見面向框架的方式增強了BeanFactory的功能。主要體現在Context包使用分層和有繼承關係的上下文類,具體情況如下:
1、MessageSource,提供對il8n訊息的訪問
2、資源訪問,例如URL和檔案
3、事件傳遞給實現了ApplicationListener介面的Bean
4、載入多個(有繼承關係)上下文類,使得每一個上下文類都專注於一個特定的層次

使用BeanFactory載入:如果Bean的某一個屬性沒有注入,使用BeanFactory載入後,在第一次呼叫getBean()方法時會丟擲異常;
使用ApplicationContext載入:使用ApplicationContext載入會在初始化時自檢,這樣有利於檢查所依賴屬性是否注入。在開發中,一般使用ApplicationContext,只有在系統資源較少時,才會考慮使用BeanFactory。

2、Data Access/Integration模組

  • DAO模組: DAO (Data Access Object)提供了JDBC的抽象層,它可消除冗長的JDBC編碼和解析資料庫廠商特有的錯誤程式碼。 並且,JDBC封裝包還提供了一種比程式設計性更好的宣告性事務管理方法,不僅僅是實現了特定介面,而且對所有的POJOs(plain old Java objects)都適用。
    (1)JDBC模組:提供了一個JDBC的抽象層,大幅度地減少了在開發過程中對資料庫操作的程式碼。
    (2)Transactions模組:支援程式設計和宣告式事務管理實現特殊介面類,並且對所有的POJO都是適用。

程式設計式:
宣告式:

  • ORM模組: ORM 封裝包提供了常用的“物件/關係”對映APIs的整合層。 其中包括JPA(Java Persistence API)JDO(Java Data Object )HibernateiBatis 。利用ORM封裝包,可以混合使用所有Spring提供的特性進行“物件/關係”對映,如前邊提到的簡單宣告性事務管理。(在ORM模組,Spring沒有提供自己的實現)

3、Spring AOP模組:
Spring的 AOP 封裝包提供了符合AOP Alliance規範的面向方面的程式設計實現,讓你可以定義,例如方法攔截器(method-interceptors)和切點(pointcuts),從邏輯上講,從而減弱程式碼的功能耦合,清晰的被分離開。而且,利用source-level的後設資料功能,還可以將各種行為資訊合併到你的程式碼中。

4、Web模組:

  • Web模組:提供了基本的Web開發整合特性,例如:多檔案上傳功能、使用的Servlet監聽器的IoC容器初始化以及Web應用上下文。
  • Servlet模組(Spring Web MVC):Spring中的MVC封裝包提供了Web應用的Model-View-Controller(MVC)實現。Spring的MVC框架並不是僅僅提供一種傳統的實現,它提供了一種清晰的分離模型,在領域模型程式碼和Web Form之間。並且,還可以藉助Spring框架的其他特性。

5、Asprects模組:
提供與AspectJ的整合,是一個功能強大且成熟的面向切面程式設計框架。

相關文章