簡單來講,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、Beans、Context和Expression Language模塊
Core和Beans模塊是框架的基礎部分,提供IoC(轉控制)和依賴注入特性。這裏的基礎概念是BeanFactory,它提供對Factory模式的經典實現來消除對程序性單例模式的須要,並真正地容許你從程序邏輯中分離出依賴關係和配置編程
AOP模塊提供了一個符合AOP聯盟標準的面向切面編程的實現,它讓你能夠定義例如方法攔截器和切點,從而將邏輯代碼分開,下降它們之間的耦合性,利用source-level的元數據功能,還能夠將各類行爲信息合併到你的代碼中設計模式
Spring AOP模塊爲基於Spring的應用程序中的對象提供了事務管理服務,經過使用Spring AOP,不用依賴EJB組件,就能夠將聲明性事務管理集成到應用程序中數組
Test模塊支持使用Junit和TestNG對Spring組件進行測試服務器
Spring 是面向 Bean 的編程(BOP, Bean Oriented Programming),Bean 在 Spring 中才是真正的主角。Bean 在 Spring 中做用就像 Object 對 OOP 的意義同樣,沒有對象的概念就像沒有面向對象編程,Spring 中沒有 Bean 也就沒有 Spring 存在的意義。Spring 提供了 IOC 容器經過配置文件或者註解的方式來管理對象之間的依賴關係。
控制反轉模式(也稱做依賴性介入)的基本概念是:不建立對象,可是描述建立它們的方式。在代碼中不直接與對象和服務鏈接,但在配置文件中描述哪個組件須要哪一項服務。容器 (在 Spring 框架中是 IOC 容器) 負責將這些聯繫在一塊兒。
在典型的 IOC 場景中,容器建立了全部對象,並設置必要的屬性將它們鏈接在一塊兒,決定什麼時間調用方法。架構
面向切面編程,即 AOP(Aspect Oriented Programming),是一種編程技術,它容許程序員對橫切關注點或橫切典型的職責分界線的行爲(例如日誌和事務管理)進行模塊化。AOP 的核心構造是方面,它將那些影響多個類的行爲封裝到可重用的模塊中。
AOP 和 IOC 是補充性的技術,它們都運用模塊化方式解決企業應用程序開發中的複雜問題。在典型的面向對象開發方式中,可能要將日誌記錄語句放在全部方法和 Java 類中才能實現日誌功能。在 AOP 方式中,能夠反過來將日誌服務模塊化,並以聲明的方式將它們應用到須要日誌的組件上。固然,優點就是 Java 類不須要知道日誌服務的存在,也不須要考慮相關的代碼。因此,用 Spring AOP 編寫的應用程序代碼是鬆散耦合的。
AOP 的功能徹底集成到了 Spring 事務管理、日誌和其餘各類特性的上下文中。框架
Spring 設計的核心是 org.springframework.beans 包,它的設計目標是與 JavaBean 組件一塊兒使用。這個包一般不是由用戶直接使用,而是由服務器將其用做其餘多數功能的底層中介。下一個最高級抽象是 BeanFactory 接口,它是工廠設計模式的實現,容許經過名稱建立和檢索對象。BeanFactory 也能夠管理對象之間的關係。