時間回到2002年,當時正是 Java EE 和 EJB 大行其道的時候,不少知名公司都是採用此技術方案進行項目開發。這時候有一個美國的小夥子認爲 EJB 太過臃腫,並非全部的項目都須要使用 EJB 這種大型框架,應該會有一種更好的方案來解決這個問題。spring
爲了證實他的想法是正確的,於2002年10月甚至寫了一本書《 Expert One-on-One J2EE 》,介紹了當時 Java 企業應用程序開發的狀況,並指出了 Java EE 和 EJB 組件框架中存在的一些主要缺陷。在這本書中,他提出了一個基於普通 Java 類和依賴注入的更簡單的解決方案。數據庫
在書中,他展現瞭如何在不使用 EJB 的狀況下構建高質量,可擴展的在線座位預留系統。爲了構建應用程序,他編寫了超過 30,000 行的基礎結構代碼,項目中的根包命名爲 com.interface21,因此人們最初稱這套開源框架爲 interface21,也就是 Spring 的前身。編程
他是誰呢,他就是大名鼎鼎的 Rod Johnson (下圖), Rod Johnson 在悉尼大學不只得到了計算機學位,同時還得到了音樂學位,更使人吃驚的是在回到軟件開發領域以前,他還得到了音樂學的博士學位。如今 Rod Johnson 已經離開了 Spring ,成爲了一個天使投資人,同時也是多個公司的董事,早已走上人生巔峯。架構
在這本書發佈後,一對一的 J2EE 設計和開發一炮而紅。這本書免費提供的大部分基礎架構代碼都是高度可重用的。 2003 年 Rod Johnson 和同伴在此框架的基礎上開發了一個全新的框架命名爲 Spring ,據 Rod Johnson 介紹 Spring 是傳統 J2EE 新的開始。隨後 Spring 發展進入快車道。框架
Spring 是指一個用於構造 JAVA 應用程序的輕量級框架,但這句話包含兩個有趣的地方。首先,你能夠採用 Spring 來構造任何程序,這一 Apache Struts這樣的框架不一樣,你不限定於只編寫 WEB 應用。其次,以上解釋中的「輕量級」並不意味着類數量不多,或者發行包大小很小,實際上,它指的是 Spring 哲學原理的總稱——那就是最少的侵入。 Spring 是輕量級的,意味着你只需對你的程序代碼作不多改動 ( 倘若有的話 ) ,而得到 Spring 核心帶來的好處,你也能夠在任什麼時候候選擇拋棄 Spring ,你會發現這實在很容易。注意,上面這句話只針對 Spring 核心自己——不少附加的 Spring 組件,好比數據訪問,須要與 Spring 框架有相對緊密得多的耦合關係。可是,這些耦合帶來的好處顯而易見。spring-boot
Spring 是一個開源框架,是爲了解決企業應用程序開發複雜性而建立的。框架的主要優點之一就是其分層架構,分層架構容許您選擇使用哪個組件,同時爲 J2EE 應用程序開發提供集成的框架。工具
Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。 Spring 模塊構建在覈心容器之上,核心容器定義了建立、配置和管理 bean 的方式spa
Spring 框架圖:設計
核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory ,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC) 模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開 ( 工廠方法 ) 。對象
Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。 Spring 上下文包括企業服務,例如JNDI 、 EJB 、電子郵件、國際化、校驗和調度功能。
經過配置管理特性, Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。因此,能夠很容易地使 Spring 框架管理的任何對象支持 AOP 。 Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。經過使用 Spring AOP ,不用依賴 EJB 組件,就能夠將聲明性事務管理集成到應用程序中。
JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不一樣數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,而且極大地下降了須要編寫的異常代碼數量(例如打開和關閉鏈接)。 Spring DAO 的面向 JDBC 的異常聽從通用的 DAO 異常層次結構。
Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關係工具,其中包括 JDO 、 Hibernate 和 iBatis SQL Map 。全部這些都聽從 Spring 的通用事務和 DAO 異常層次結構。
Web 上下文模塊創建在應用程序上下文模塊之上,爲基於 Web 的應用程序提供了上下文。因此, Spring 框架支持與 Jakarta Struts 的集成。 Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工做。
MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。經過策略接口, MVC 框架變成爲高度可配置的, MVC 容納了大量視圖技術,其中包括 JSP 、 Velocity 、 Tiles 、 iText 和 POI 。