week 6 Spring history and design philosophy

1、前言html

Spring 框架能夠說是 Java 開發人員使用的最流行的應用程序開發框架之一。它目前由大量提供一系列服務的模塊組成。包括模塊容器,爲構建橫切關注點提供支持的面向切面編程(AOP),安全框架,數據存取框架,Web 應用框架和用於模塊測試提供支持的類。Spring 框架的全部組件都經過依賴注入粘在一塊兒。依賴注入(也稱爲控制反轉)使設計和測試鬆散耦合的軟件模塊變得更容易。java

多年來 Spring 框架已變得足夠成熟。幾乎全部 Java 企業應用須要用到的基礎組件均可以在 Spring 框架中找到。但在一個新應用中將全部須要的 Spring 組件整合並配置好並不容易。這包括在 gradle/maven 中設置依賴庫,使用 xml、註解或 java 代碼配置須要的 Spring Bean。Spring 開發者意識到這裏的絕大多數工做是能夠能夠自動化的,Spring Boot 出現了!web

(1) 春天來了—— Spring 來了!

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數據庫

(2)What Is Spring(Spring 是什麼 ) ?

或許解釋清楚 Spring 技術究竟是什麼會很困難。一般, Spring 是指一個用於構造 JAVA 應用程序的輕量級框架,但這句話包含兩個有趣的地方。首先,你能夠採用 Spring 來構造任何程序,這一 Apache Struts 這樣的框架不一樣,你不限定於只編寫 WEB 應用。其次,以上解釋中的「輕量級」並不意味着類數量不多,或者發行包大小很小,實際上,它指的是 Spring 哲學原理的總稱——那就是最少的侵入。 Spring 是輕量級的,意味着你只需對你的程序代碼作不多改動 ( 倘若有的話 ) ,而得到 Spring 核心帶來的好處,你也能夠在任什麼時候候選擇拋棄 Spring ,你會發現這實在很容易。注意,上面這句話只針對 Spring 核心自己——不少附加的 Spring 組件,好比數據訪問,須要與 Spring 框架有相對緊密得多的耦合關係。可是,這些耦合帶來的好處顯而易見。編程

Spring 是一個開源框架,是爲了解決企業應用程序開發複雜性而建立的。框架的主要優點之一就是其分層架構,分層架構容許您選擇使用哪個組件,同時爲 J2EE 應用程序開發提供集成的框架。設計模式

(3)Spring 的體系結構

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 版本展開。

 Spring 時間線圖表

 

 3、關於spring的編程哲學

一切都是從Bean開始的

面向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 的系統架構圖:

  •  其實面向對象的思想,並非只屬於 面嚮對象語言,在面向過程的理由也用到這種思想,裏面的構件,結構 均可以理解爲 對象,其實咱們在考慮 任何事物的時候都是把它當作對象(事物)來考慮,因此面向對象的思想不是 OOP語言的 專屬。
  •  pring體系的核心是IoC和Aop模塊。對於kernel而言,進程調度器就是其關鍵部位,kernel經過「進程」這個概念來抽象物理的計算資源,同時經過調度算法的設計來實現對計算資源的高效使用。而對於Spring來講,也是同樣的,一方面經過IoC容器來進行POJO對象管理,以及對他們進行鬆耦合處理,同時也讓信息資源能夠用最簡單的Java 語言來抽象和描述;另外一方面,能夠經過Aop來加強服務的功能。
  •  你能夠把Spring 中的 IOC和AOP模塊 比做操做系統的 Kernel,對於操做系統的Kernel來講,進度調度器的設計是關鍵部分,經過進程調度器,一方面 使用 "進程"(比做 Spring中的Bean)這個概念來抽象物理的計算資源,另外一方面,能夠經過調度算法的設計來實現對計算機資源的高效使用。對Spring來講也是同樣的,一方面它經過IOC容器來管理Bean對象,以及它們相互之間的耦合關係,使企業的信息(數據)資源能夠用簡單的Java語言來抽象和描述;另外一方面,能夠經過AOP,以動態和非侵入的方式來加強服務的功能。固然 操做系統光有一個 Kernel 是不行的,咱們還須要安裝顯卡驅動,鼠標和鍵盤驅動等驅動來驅動設備以方便咱們的使用,這就比如Spring裏面的事務處理,Web MVC, JDBC,ORM遠端調用等。
  •  另外,在Spring體系中,Spring簡化了Java EE所進行的開發,這種簡化是指咱們可以在不EJB這麼厚重的環境中使用Java EE的基本服務——爲應用開發服務提供了許多即開即用的系統組件合服務,這些服務涵蓋了Java EE各個基本服務,對於其餘的服務,也能夠根據使用狀況動態擴展到Spring體系中。基原本說,Spring體系中已經涵蓋了Java EE中常常用到的許多服務,好比事務處理、Web MVC、JDBC、ORM、遠程調用,這些服務的價值是不可忽視的,就像kernel若是沒有實現許多驅動,那Linux對用戶而言也是沒有任何價值的。Spring經過本身的努力,提供了這些看起來不起眼,但對推廣起着關鍵做用的部分,從而構建起了一個豐富的生態圈。其實,這也是interface21和Spring之間的區別。
  •  和Linux同樣,做爲一個開源項目。其開源的特性也深深影響了Spring體系的設計,在發展的過程當中,其自身也吸取了很多好的社區項目,好比Spring的Security框架就是來源於社區Acegi,這個框架的原意是爲Spring設計一個安全框架,讓Spring應用更方便地處理一些安全性的問題,但慢慢的被Spring吸取,成爲Spring的一個子項目。

 

很好的博文推薦

深刻淺出,瞭解 Spring 框架和 Spring Boot 的歷史

從編程哲學到開發應用:Spring的初步應用

Spring 的骨骼架構

Spring 框架的設計理念與設計模式分析

相關文章
相關標籤/搜索