spring總體架構

設計目標

簡單來講,Spring的設計目標是爲咱們提供一個一站式的輕量級應用開發平臺,抽象了應用開發中遇到的共性問題。
做爲平臺,它考慮到了企業應用資源的使用,好比數據的持久化、數據集成、事務處理、消息中間件、分佈式式計算等高效可靠處理企業數據方法的技術抽象。
輕量級是相對於傳統J2EE而言的,傳統的J2EE開發,須要依賴按照J2EE規範實現的J2EE應用服務器,設計和實現時,須要遵循一系列的接口標準,這種開發方式耦合性高,使應用在可測試性和部署上都有影響,對技術的理解和要求相對較高。
使用Spring進行開發,對開發人員比較輕量,可使用POJO和JavaBean的開發方式,使應用面向接口開發,充分支持了面向對象的設計方法。經過IOC容器減小了直接耦合,經過AOP以動態和非侵入的方式增長了服務的功能,爲靈活選取不一樣的服務實現提供了基礎,這也是Spring的核心。
開發過程當中的共性問題,Spring封裝成了各類組件,並且Spring經過社區,造成了一個開放的生態系統,好比Spring Security就是來源於一個社區貢獻Acegi.程序員

總體架構

以Spring Framework 4.x 爲例,從整體來看,Spring分爲3層,最底層是核心層,包括IOC、AOP等核心模塊,中間層是封裝的JavaEE服務、做爲中間的驅動組件,最上層是各個應用。web

下圖是Spring官網的一個架構圖,介紹下其組成部分:spring

這些模塊被總結爲如下幾個部分:數據庫

Core Container

Core Container(核心容器)包含有Core、Beans、Context和Expression Language模塊
Core和Beans模塊是框架的基礎部分,提供IoC(轉控制)和依賴注入特性。這裏的基礎概念是BeanFactory,它提供對Factory模式的經典實現來消除對程序性單例模式的須要,並真正地容許你從程序邏輯中分離出依賴關係和配置編程

  • Core模塊主要包含Spring框架基本的核心工具類
  • Beans模塊是全部應用都要用到的,它包含訪問配置文件、建立和管理bean以及進行Inversion of Control/Dependency Injection(Ioc/DI)操做相關的全部類
  • Context模塊構建於Core和Beans模塊基礎之上,提供了一種相似於JNDI註冊器的框架式的對象訪問方法。Context模塊繼承了Beans的特性,爲Spring核心提供了大量擴展,添加了對國際化(如資源綁定)、事件傳播、資源加載和對Context的透明建立的支持。ApplicationContext接口是Context模塊的關鍵
  • Expression Language模塊提供了一個強大的表達式語言用於在運行時查詢和操縱對象,該語言支持設置/獲取屬性的值,屬性的分配,方法的調用,訪問數組上下文、容器和索引器、邏輯和算術運算符、命名變量以及從Spring的IoC容器中根據名稱檢索對象

Data Access/Integration

  • JDBC模塊提供了一個JDBC抽象層,它能夠消除冗長的JDBC編碼和解析數據庫廠商特有的錯誤代碼,這個模塊包含了Spring對JDBC數據訪問進行封裝的全部類
  • ORM模塊爲流行的對象-關係映射API,如JPA、JDO、Hibernate、iBatis等,提供了一個交互層,利用ORM封裝包,能夠混合使用全部Spring提供的特性進行O/R映射,如前邊提到的簡單聲明性事務管理

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-Porlet模塊:提供了用於Portlet環境和Web-Servlet模塊的MVC的實現

AOP

AOP模塊提供了一個符合AOP聯盟標準的面向切面編程的實現,它讓你能夠定義例如方法攔截器和切點,從而將邏輯代碼分開,下降它們之間的耦合性,利用source-level的元數據功能,還能夠將各類行爲信息合併到你的代碼中設計模式

Spring AOP模塊爲基於Spring的應用程序中的對象提供了事務管理服務,經過使用Spring AOP,不用依賴EJB組件,就能夠將聲明性事務管理集成到應用程序中數組

Test

Test模塊支持使用Junit和TestNG對Spring組件進行測試服務器

Spring 的設計理念

Spring 是面向 Bean 的編程(BOP, Bean Oriented Programming),Bean 在 Spring 中才是真正的主角。Bean 在 Spring 中做用就像 Object 對 OOP 的意義同樣,沒有對象的概念就像沒有面向對象編程,Spring 中沒有 Bean 也就沒有 Spring 存在的意義。Spring 提供了 IOC 容器經過配置文件或者註解的方式來管理對象之間的依賴關係。
控制反轉模式(也稱做依賴性介入)的基本概念是:不建立對象,可是描述建立它們的方式。在代碼中不直接與對象和服務鏈接,但在配置文件中描述哪個組件須要哪一項服務。容器 (在 Spring 框架中是 IOC 容器) 負責將這些聯繫在一塊兒。
在典型的 IOC 場景中,容器建立了全部對象,並設置必要的屬性將它們鏈接在一塊兒,決定什麼時間調用方法。架構

面向切面編程AOP

面向切面編程,即 AOP(Aspect Oriented Programming),是一種編程技術,它容許程序員對橫切關注點或橫切典型的職責分界線的行爲(例如日誌和事務管理)進行模塊化。AOP 的核心構造是方面,它將那些影響多個類的行爲封裝到可重用的模塊中。
AOP 和 IOC 是補充性的技術,它們都運用模塊化方式解決企業應用程序開發中的複雜問題。在典型的面向對象開發方式中,可能要將日誌記錄語句放在全部方法和 Java 類中才能實現日誌功能。在 AOP 方式中,能夠反過來將日誌服務模塊化,並以聲明的方式將它們應用到須要日誌的組件上。固然,優點就是 Java 類不須要知道日誌服務的存在,也不須要考慮相關的代碼。因此,用 Spring AOP 編寫的應用程序代碼是鬆散耦合的。
AOP 的功能徹底集成到了 Spring 事務管理、日誌和其餘各類特性的上下文中。框架

IOC 容器

Spring 設計的核心是 org.springframework.beans 包,它的設計目標是與 JavaBean 組件一塊兒使用。這個包一般不是由用戶直接使用,而是由服務器將其用做其餘多數功能的底層中介。下一個最高級抽象是 BeanFactory 接口,它是工廠設計模式的實現,容許經過名稱建立和檢索對象。BeanFactory 也能夠管理對象之間的關係。

相關文章
相關標籤/搜索