1、前言html
Spring 框架能夠說是 Java 開發人員使用的最流行的應用程序開發框架之一。它目前由大量提供一系列服務的模塊組成。包括模塊容器,爲構建橫切關注點提供支持的面向切面編程(AOP),安全框架,數據存取框架,Web 應用框架和用於模塊測試提供支持的類。Spring 框架的全部組件都經過依賴注入粘在一塊兒。依賴注入(也稱爲控制反轉)使設計和測試鬆散耦合的軟件模塊變得更容易。java
多年來 Spring 框架已變得足夠成熟。幾乎全部 Java 企業應用須要用到的基礎組件均可以在 Spring 框架中找到。但在一個新應用中將全部須要的 Spring 組件整合並配置好並不容易。這包括在 gradle/maven 中設置依賴庫,使用 xml、註解或 java 代碼配置須要的 Spring Bean。Spring 開發者意識到這裏的絕大多數工做是能夠能夠自動化的,Spring Boot 出現了!web
Spring 在起源能夠回溯到 Rod Johnson 編寫的「 Expert One-to-One J2EE Design and Development 」一書 (Wrox , 2002) 。在這本書中, Rod 展現了他的 interface21 框架,他爲本身的應用編寫了這一框架。這一框架被髮布到開源世界後,組成了如今咱們所知的 Spring 框架的基礎。算法
Spring 在早期的 beta 和發佈備選版本階段進行得很迅速,第一個正式版本 1.0 在 2004 年 3 月 24 日 發佈。spring
官方: http://www.springframework.org數據庫
或許解釋清楚 Spring 技術究竟是什麼會很困難。一般, Spring 是指一個用於構造 JAVA 應用程序的輕量級框架,但這句話包含兩個有趣的地方。首先,你能夠採用 Spring 來構造任何程序,這一 Apache Struts 這樣的框架不一樣,你不限定於只編寫 WEB 應用。其次,以上解釋中的「輕量級」並不意味着類數量不多,或者發行包大小很小,實際上,它指的是 Spring 哲學原理的總稱——那就是最少的侵入。 Spring 是輕量級的,意味着你只需對你的程序代碼作不多改動 ( 倘若有的話 ) ,而得到 Spring 核心帶來的好處,你也能夠在任什麼時候候選擇拋棄 Spring ,你會發現這實在很容易。注意,上面這句話只針對 Spring 核心自己——不少附加的 Spring 組件,好比數據訪問,須要與 Spring 框架有相對緊密得多的耦合關係。可是,這些耦合帶來的好處顯而易見。編程
Spring 是一個開源框架,是爲了解決企業應用程序開發複雜性而建立的。框架的主要優點之一就是其分層架構,分層架構容許您選擇使用哪個組件,同時爲 J2EE 應用程序開發提供集成的框架。設計模式
Spring 框架是一個分層架構,由 7 個定義良好的模塊組成。 Spring 模塊構建在覈心容器之上,核心容器定義了建立、配置和管理 bean 的方式安全
Spring 框架圖:websocket
2、關於Soring歷史
起點
2002 年 10 月,Rod Johnson 撰寫了一本名爲 Expert One-on-One J2EE 設計和開發的書。本書由 Wrox出版,介紹了當時 Java 企業應用程序開發的狀況,並指出了 Java EE 和 EJB 組件框架中的存在的一些主要缺陷。在這本書中,他提出了一個基於普通 Java 類和依賴注入的更簡單的解決方案。
在書中,他展現瞭如何在不使用 EJB 的狀況下構建高質量,可擴展的在線座位預留系統。爲了構建應用程序,他編寫了超過 30,000 行的基礎結構代碼。包含許多可重用的 Java 接口和類,如 ApplicationContext和BeanFactory。因爲java接口是依賴注入的基本構建塊,所以他將這些類的根包命名爲com.interface21。
一對一的 J2EE 設計和開發一炮而紅。本書免費提供的大部分基礎架構代碼都是高度可重用的。即便在 15 年後,本書及其原則仍然與構建高質量的 Java Web 應用程序相關。
Spring 誕生
在本書發佈後不久,開發者 Juergen Hoeller 和 Yann Caroff 說服 Rod Johnson 建立一個基於基礎結構代碼的開源項目。Rod,Juergen 和 Yann 於 2003 年 2 月左右開始合做開發該項目 。Yann 爲新框架創造了「Spring」的名字。據 Rod 介紹,Spring 是傳統 J2EE 的新開始。
200 年 6 月,Spring 2.0 在 Apache 2.0 許可下發布。2004 年 3 月,1.0 版發佈。有趣的是,在1.0發佈以前,spring 就被開發人員普遍採用。2004 年 8 月,Rod Johnson,Juergen Hoeller,Keith Donald 和Colin Sampaleanu 共同創立了一家專一於 Spring 諮詢,培訓和支持的公司 interface21。
Yann Caroff 在早期離開了團隊,Rod Johnson 在 2012 年離開,Juergen Hoeller 仍然是 Spring 開發團隊的積極成員。
Spring 框架的快速增加
自 2004 年 1.0 版本發佈以來,Spring 框架迅速發展。Spring 2.0 於 2006 年 10 月發佈,到那時,Spring的下載量超過了 100 萬。Spring 2.0 具備可擴展的 XML 配置功能,用於簡化 XML 配置,支持 Java 5,額外的 IoC 容器擴展點,支持動態語言。
在 Rod 領導下管理 Interface21 項目於 2007 年 11 月改名爲 SpringSource。同時發佈了 Spring 2.5。Spring 2.5 中的主要新功能包括支持 Java 6 / Java EE 5,支持註釋配置,classpath 中的組件自動檢測和兼容 OSGi 的 bundle。
2007 年,SpringSource 從基準資本得到了 A 輪融資(1000萬美圓)。SpringSource 在此期間收購了多家公司,如Hyperic,G2One 等。2009年8月,SpringSource 以 4.2 億美圓被 VMWare 收購。SpringSource 在幾周內收購了雲代工廠,這是一家雲 PaaS 提供商。2015 年,雲代工廠轉型成了非營利雲代工廠。
2009 年 12 月,Spring 3.0 發佈。Spring 3.0 具備許多重要特性,如重組模塊系統,支持 Spring 表達式語言,基於 Java 的 bean 配置(JavaConfig),支持嵌入式數據庫(如 HSQL,H2 和 Derby),模型驗證/ REST 支持和對 Java EE 的支持。
2011 年和 2012 年發佈了許多 3.x 系列的小版本。2012 年 7 月,Rod Johnson 離開了團隊。2013 年 4月,VMware 和 EMC 經過 GE 投資建立了一家名爲 Pivotal 的合資企業。全部的 Spring 應用項目都轉移到了 Pivotal。
2013 年 12 月,Pivotal 宣佈發佈 Spring 框架 4.0。Spring 4.0 是 Spring 框架的一大進步,它包含了對Java 8 的全面支持,更高的第三方庫依賴性(groovy 1.8+,ehcache 2.1+,hibernate 3.6+等),Java EE 7 支持,groovy DSL for bean 定義,對 websockets 的支持以及對泛型類型的支持做爲注入 bean 的限定符。
2014 年至 2017 年期間發佈了許多 Spring 框架 4.xx 系列版本。Spring 4.3.7 於 2017 年 3 月發佈。Spring 4.3.8 於 2017 年 4 月發佈,併成爲 4.x 系列中的最後一個。Spring 框架的下一個延續的主要版本是在 5.0 版本展開。
3、關於spring的編程哲學
一切都是從Bean開始的
Spring 是面向 Bean 的編程(Bean Oriented Programming, BOP),Bean 在 Spring 中才是真正的主角。Bean 在 Spring 中做用就像 Object 對 OOP 的意義同樣,Spring 中沒有 Bean 也就沒有 Spring 存在的意義。Spring 提供了 IoC容器經過配置文件或者註解的方式來管理對象之間的依賴關係。
控制反轉( 其中最多見的方式叫作依賴注入(Dependency Injection,DI),還有一種方式叫「依賴查找」(Dependency Lookup,DL),她在C++、Java、PHP以及.NET中都運用。在最先的Spring中是包含有依賴注入方法和依賴查詢的,但由於依賴查詢使用頻率太低,不久就被Spring移除了,因此在Spring中控制反轉也被稱做依賴注入),她的基本概念是:不建立對象,可是描述建立它們的方式。在代碼中不直接與對象和服務鏈接,但在配置文件中描述哪個組件須要哪一項服務。容器 (在 Spring 框架中是 IoC容器) 負責將這些聯繫在一塊兒。
在典型的 IoC場景中,容器建立了全部對象,並設置必要的屬性將它們鏈接在一塊兒,決定什麼時間調用方法。
Spring 總共大約有20個模塊,由1300多個不一樣的文件構成。而這些組件被分別整合在覈心容器(Core Container)、Aop(Aspect Oriented Programming)和設備支持(Instrmentation)、數據訪問及集成(Data Access/Integeration)、Web、報文發送(Messaging)、Test,6個模塊集合中。
右圖是 Spring 4 的系統架構圖:
很好的博文推薦: