Spring框架蛙埂,Spring Boot、Spring IO的歷史和源源

概述

Spring框架是在Java開發(fā)中廣泛使用的框架之一遮糖,是SSH中還能持久熱門的長青樹绣的。在Struts 2被安全漏洞打擊的一撅不正,在RESTful欲账、微服務(wù)流行的今天屡江,Spring仍然在扛著Java在這些web開發(fā)方面的大旗。

Spring框架由大量的模塊及其提供的一系列服務(wù)構(gòu)成赛不。其中包括組件容器惩嘉,用于構(gòu)建橫向關(guān)注面向業(yè)務(wù)的編程支持,安全框架踢故,數(shù)據(jù)訪問框架文黎,Web應(yīng)用程序框架和測(cè)試組件的支持類等。所有這些組件都通過依賴注入架構(gòu)模式關(guān)聯(lián)在一塊畴椰。依賴注入(IOC臊诊,也稱為控制反轉(zhuǎn))使得設(shè)計(jì)和測(cè)試松散耦合軟件組件變得非常方便。目前Spring框架版本的是5.0.4斜脂,下一個(gè)版本5.05即將發(fā)布抓艳。

多年以來,Spring框架一直保持持續(xù)快速的增長帚戳$杌颍基本上所Java企業(yè)級(jí)應(yīng)用程序開發(fā)基礎(chǔ)架構(gòu)中都會(huì)包括Spring框架儡首。然而,將所有需要的Spring組件集成和配置頗耗力氣偏友。包括在gradle和maven中設(shè)置庫依賴項(xiàng)蔬胯,然后使用xml,annotations或java代碼配置所需的spring bean位他。

Spring開發(fā)人員也意識(shí)了到這是個(gè)頭疼的問題氛濒,希望尋求自動(dòng)化工具來自動(dòng)完成這個(gè)工作。于是引入了Sprint Boot鹅髓。

Spring boot采取定制地方法構(gòu)建Sprint應(yīng)用舞竿。這意味著對(duì)于Spring的每個(gè)主用例,Spring boot都定義一組默認(rèn)的組件依賴關(guān)系和組件的自動(dòng)配置窿冯。 Spring boot使用一系列的預(yù)制啟動(dòng)項(xiàng)來實(shí)現(xiàn)這個(gè)功能骗奖。比如,要構(gòu)建一個(gè)Sprint Web應(yīng)用程序醒串,你只需添加?spring-boot-starter-web的依賴执桌;要使用Sprint email庫,只需添加對(duì)spring-boot-starter-mail的依賴芜赌。 Spring boot還有一些很酷的功能仰挣,例如在應(yīng)用中嵌入應(yīng)用服務(wù)器(jetty 或者tomcat),基于groovy和健康较鼓、度量監(jiān)控的命令行界面椎木。

Spring boot使Java開發(fā)人員能夠快速發(fā)起一個(gè)包含所有必需的Spring組件的新項(xiàng)目。

在本文主要介紹Spring框架和Spring boot發(fā)展歷史博烂。

Spring框架的歷史

起點(diǎn)

2002年10月香椎,Rod Johnson撰寫了一本名為《Expert One-on-One J2EE設(shè)計(jì)和開發(fā)》的書。本書由Wrox出版禽篱,概括了當(dāng)時(shí)Java企業(yè)應(yīng)用程序開發(fā)的現(xiàn)狀畜伐,指出了Java EE和EJB組件框架中的一些主要缺陷。在這本書中躺率,他提出了一個(gè)基于普通Java類和注入依賴的更簡單的解決方案玛界。以下是書中提出的一些問題:

將工作流邏輯集中到抽象超類中是反轉(zhuǎn)控制的一個(gè)例子。與傳統(tǒng)的由類庫用戶代碼調(diào)用庫代碼的方法不同悼吱,在這種方法中慎框,超類中的框架代碼調(diào)用用戶代碼。反轉(zhuǎn)控制是框架的基礎(chǔ)后添,它傾向于大量使用模板方法模式笨枯。

在書中,他展示了如何在不使用EJB的情況下構(gòu)建高質(zhì)量,可擴(kuò)展的在線座位預(yù)定程序馅精。為了構(gòu)建這個(gè)程序严嗜,他編寫了超過30000行的基礎(chǔ)結(jié)構(gòu)代碼(牛逼)!其中包含了大量可重用的Java的接口和類洲敢,例如ApplicationContext和BeanFactory等漫玄。由于Java的接口是依賴注入的基本構(gòu)建塊,他將這些類的根包命名為com.interface21压彭。正如羅德后來解釋的那樣睦优,21這個(gè)是指21世紀(jì),寓意對(duì)21世紀(jì)的展望哮塞。

《Expert One-on-One J2EE設(shè)計(jì)和開發(fā)》一炮走紅刨秆。書中附帶的免費(fèi)基礎(chǔ)架構(gòu)代碼都高度可重用凳谦,很快一些有眼力見的開發(fā)人員就在他們的項(xiàng)目中使用了忆畅。 Wrox也為該書提供了源代碼和勘誤表的網(wǎng)頁,也有一個(gè)在線論壇做問題討論尸执。如今16年過去了家凯,這本書和他提出的一些原則仍然還在指導(dǎo)著高質(zhì)量的Java Web應(yīng)用程序構(gòu)建。筆者強(qiáng)烈建議如失,所有有志于這方面的碼農(nóng)可以搞一份收藏绊诲,備用查看,如果有需要的話給蟲蟲留言褪贵。

Spring的誕生

在本書發(fā)布后不久掂之,開發(fā)者Juergen Hoeller和Yann Caroff說服Rod Johnson基于書上的代碼創(chuàng)建一個(gè)開源基礎(chǔ)框架的項(xiàng)目。 于是在2003年2月左右由Rod脆丁,Juergen和Yann一起創(chuàng)建了一個(gè)項(xiàng)目世舰,并且Yann為新框架起了一個(gè)很詩意的名字"Spring"。寓意著要給處于"冬天"的傳統(tǒng)J2EE帶來新開始槽卫。

Rod Johnson的書以非常詳盡跟压,翔實(shí)和實(shí)用的方式介紹了J2EE的最佳實(shí)踐。從編碼標(biāo)準(zhǔn)歼培,陳規(guī)震蒋,bean實(shí)體,單元測(cè)試躲庄,設(shè)計(jì)決策查剖,持久性,緩存噪窘,EJB笋庄,model-2表示層,視圖,驗(yàn)證技術(shù)還有性能等方面都有翔實(shí)的論述无切。書中案例是帶領(lǐng)大家做個(gè)java項(xiàng)目開發(fā)的絕佳之旅荡短,從開發(fā)現(xiàn)狀、制約因子哆键,風(fēng)險(xiǎn)及至最佳決策掘托。它不光是一本教科書,還是一個(gè)Java開發(fā)的知識(shí)庫籍嘹。

2003年6月闪盔,Spring 0.9以Apache 2.0許可協(xié)議發(fā)布。 2004年3月Spring 1.0版發(fā)布辱士。實(shí)際上在1.0發(fā)布之前泪掀,Spring就已經(jīng)得到開發(fā)人員的廣泛使用。 2004年8月颂碘,Rod Johnson异赫,Juergen Hoeller,Keith Donald和Colin Sampaleanu共同創(chuàng)立了interface21,头岔,一家專注于Spring咨詢塔拳,培訓(xùn)和支持的公司。

Yann Caroff在不久就離開了團(tuán)隊(duì)峡竣。 Rod Johnson也在2012年離開了Spring團(tuán)隊(duì)靠抑。Juergen Hoeller則一直是Spring的活躍的開發(fā)者。

Spring快速發(fā)展

自2004年發(fā)布1.0版本以來适掰,Spring框架得到迅速發(fā)展颂碧。Spring 2.0于2006年10月發(fā)布,截止當(dāng)時(shí)类浪,Spring的下載量超過100萬载城。 Spring 2.0具有可擴(kuò)展的XML配置功能,用于簡化XML配置戚宦,還支持Java 5个曙,額外的IoC容器擴(kuò)展點(diǎn),支持動(dòng)態(tài)語言(如groovy受楼,aop增強(qiáng)功能和新的bean范圍)垦搬。

2007年11月Interface21公司更名為SpringSource。同時(shí)發(fā)布了Spring 2.5艳汽。 Spring 2.5中的主要新功能包括支持Java 6 和Java EE 5猴贰,支持配置注釋,支持自動(dòng)檢測(cè)和兼容組件的類路徑和OSGi兼容bundle河狐。

2007年米绕,SpringSource從benchmark capital獲得了1000萬美元A輪投資瑟捣。 SpringSource在2008年通過來accel partners 和 benchmark的B輪投資,籌集了更多的資金栅干。此期間它還收購了多家公司(Covalent, Hyperic, G2One等)迈套。 2009年8月,SpringSource以4.2億美元被VMWare收購碱鳞,SpringSource又在幾周內(nèi)收購了cloud foundry桑李,這是一家云PaaS供應(yīng)商。 2015年窿给,cloud foundry轉(zhuǎn)移到了非營利的cloud foundry基金會(huì)贵白。

2009年12月,Spring 3.0發(fā)布崩泡。 Spring 3.0具有許多重要特性禁荒,如模塊重組系統(tǒng),支持Spring表達(dá)式語言角撞,基于Java的bean配置(JavaConfig)呛伴,嵌入式數(shù)據(jù)庫(如HSQL,H2和Derby)支持靴寂,模型驗(yàn)證和REST支持磷蜀,以及對(duì)Java EE 6的支持。

2011年和2012年發(fā)布了許多3.x系列的小版本百炬。2012年7月,Rod Johnson離開了Spring團(tuán)隊(duì)污它。2013年4月剖踊,VMware和EMC通過GE投資創(chuàng)建了一家名為Pivotal的合資企業(yè)。所有的Spring項(xiàng)目都轉(zhuǎn)移到了Pivotal衫贬。

2013年12月德澈,Pivotal宣布發(fā)布Spring框架4.0。 Spring 4.0是Spring框架的一個(gè)重大版本升級(jí)固惯,包含了對(duì)Java 8的全面支持梆造,更高版本的第三方庫依賴(groovy 1.8+,ehcache 2.1+葬毫,hibernate 3.6+等)镇辉,Java EE 7的支持,bean定義的groovy DSL贴捡,websockets的支持忽肛,以及注入bean限定符泛型支持。

2014年至2017年期間發(fā)布了許多Spring框架4.x.x版本烂斋。

Spring 5.0 GA版本于2017年9月28日發(fā)布屹逛。Spring 5.0開始支持JDK 8和Java EE 7础废,同時(shí)兼容JDK9。全面支持Servlet 3.1罕模,還引入了一個(gè)全新的模塊Spring WebFlux用于替代老話的 spring-webmvc评腺;對(duì)Kotlin也有了更好的支持。

Spring Boot的歷史

2012年10月淑掌,Mike Youngstrom在Spring jira中創(chuàng)建了一個(gè)功能需求歇僧,要求在Spring框架中支持無容器Web應(yīng)用程序體系結(jié)構(gòu)。他建議通過main方法引導(dǎo)的Spring容器內(nèi)配置Web容器服務(wù)锋拖。

這一需求促成了2013年初開始的Spring Boot項(xiàng)目的開發(fā)诈悍。2014年4月,Spring Boot 1.0.0發(fā)布兽埃。從那以后侥钳,一些Spring Boot小版本開始出現(xiàn)。

Spring Boot 1.1(2014年6月):改進(jìn)的模板支持柄错,gemfire支持舷夺,elasticsearch和apache solr的自動(dòng)配置。

Spring boot 1.2(2015年3月):升級(jí)到servlet 3.1/tomcat 8/jetty 9和spring 4.1售貌,支持banner/jms /SpringBoot Application注釋给猾。

Spring boot 1.3(2016年12月):升級(jí)到spring4.2,新的spring-boot-devtools颂跨,緩存技術(shù)的自動(dòng)配置(ehcache敢伸,hazelcast,redis恒削,guava和infinispan)以及完全可執(zhí)行的jar支持池颈。

Spring boot 1.4(2017年1月):升級(jí)到spring 4.3,couchbase/neo4j支持钓丰,啟動(dòng)失敗分析和RestTemplateBuilder躯砰。

Spring boot 1.5(2017年2月):支持kafka /ldap,第三方庫升級(jí)携丁,放棄對(duì)CRaSH支持和執(zhí)行器日志終端用以動(dòng)態(tài)修改應(yīng)用程序日志級(jí)別琢歇。

Spring boot的簡便性使java開發(fā)人員能夠快速大規(guī)模地應(yīng)用于項(xiàng)目。 Spring boot可以說是Java中開發(fā)基于RESTful微服務(wù)Web應(yīng)用的最快方法之一梦鉴。它也非常適合docker容器部署和快速原型設(shè)計(jì)李茫。

目前Spring boot 最新版本是2.0.0,于2018年3月1日發(fā)布尚揣,新版本特點(diǎn)有:

基于 Java 8涌矢,支持 Java 9;支持 Quartz 調(diào)度程序快骗;支持嵌入式 Netty娜庇,Tomcat, Undertow 和 Jetty 均已支持 HTTP/2塔次;執(zhí)行器架構(gòu)重構(gòu)函荣,支持 Spring MVC, WebFlux 和 Jersey洋魂;對(duì)響應(yīng)式編程提供最大支持缎讼;引入對(duì) Kotlin 1.2.x 的支持恩袱,并提供了一個(gè) runApplication 函數(shù),用Kotlin 通用的方式啟動(dòng) Spring Boot 應(yīng)用程序变泄。

Spring IO和Spring Boot

2014年6月亮元,Spring io 1.0.0發(fā)布袖外。 Spring io代表預(yù)定義應(yīng)用類庫和依賴關(guān)系(包括Spring工程和第三方庫)依賴維護(hù)平臺(tái)汁掠,Sppring io可以完美的支持Maven和Gradle略吨。這意味著如果你使用特定的Spring IO版本創(chuàng)建項(xiàng)目,則無需配置你所使用的庫的版本考阱。請(qǐng)注意翠忠,這包括Spring庫和大多數(shù)流行的第三方庫。Spring boot啟動(dòng)器工程也是Spring io的一部分乞榨。例如秽之,如果你使用的是spring io 1.0.0,則在添加啟動(dòng)器項(xiàng)目的依賴關(guān)系時(shí)吃既,不需要指定spring boot版本考榨。它會(huì)自動(dòng)設(shè)定它為spring boot 1.1.1.RELEASE。

在概念上spring io由基礎(chǔ)層模塊和執(zhí)行層領(lǐng)域特定運(yùn)行時(shí)(DSRs)組成鹦倚『又剩基礎(chǔ)層包括core Spring模塊和關(guān)聯(lián)的第三方依賴關(guān)系,可確定不會(huì)有沖突申鱼。執(zhí)行層提供的DSRs愤诱,簡化為生產(chǎn)準(zhǔn)備的構(gòu)建、基于JVM的工作負(fù)荷等捐友。 Spring boot是Spring IO提供的執(zhí)行層DSRs之一,還有一個(gè)DSRs是Grails溃槐。

有兩種方法可以用來構(gòu)建Spring應(yīng)用程序:使用spring boot和直接使用spring io匣砖。

需要注意的是,通常每當(dāng)新的Spring框架版本發(fā)布時(shí)昏滴,都會(huì)伴隨著新的Spring boot版本猴鲫,然后是新的sprint io版本發(fā)布。

2015年11月谣殊,Spring io 2.0.0發(fā)布拂共。版本提供了新的模塊和依賴關(guān)系,包括Spring Boot 1.3姻几。2016年7月宜狐,Spring io團(tuán)隊(duì)決定使用按字母順序的版本方案势告。 Spring IO使用城市名稱為大版本,用一個(gè)字母來表示小版本抚恒。因此咱台,根據(jù)所使用的各個(gè)組件,你的應(yīng)用程序可能需要選擇合宜版本俭驮。一個(gè)新名稱發(fā)布的回溺,表示一個(gè)維護(hù)版本發(fā)布,你可以在不影響代碼的使用混萝。

2016年9月遗遵,首個(gè)按字母順序排列和城市命名的Spring io平臺(tái)版本Athens發(fā)布了。它包含sprint boot 1.4和其他第三方庫升級(jí)逸嘀。此后车要,Athens發(fā)布了多個(gè)服務(wù)版本(SR1,SR2厘熟,SR3和SR4)屯蹦。

2017年3月, spring io平臺(tái)Brussels -SR1發(fā)布绳姨。它使用最新的spring boot版本1.5.2.RELEASE登澜。

目前最新版本為Brussels-SR7,于2018年1月31日發(fā)布飘庄,下一個(gè)版本Cairo-RC1也在提供了初步使用版本脑蠕,支持模塊如下:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市跪削,隨后出現(xiàn)的幾起案子谴仙,更是在濱河造成了極大的恐慌,老刑警劉巖碾盐,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晃跺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡毫玖,警方通過查閱死者的電腦和手機(jī)掀虎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來付枫,“玉大人烹玉,你說我怎么就攤上這事〔玻” “怎么了二打?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長掂榔。 經(jīng)常有香客問我继效,道長症杏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任莲趣,我火速辦了婚禮鸳慈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喧伞。我一直安慰自己走芋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布潘鲫。 她就那樣靜靜地躺著翁逞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪溉仑。 梳的紋絲不亂的頭發(fā)上挖函,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音浊竟,去河邊找鬼怨喘。 笑死,一個(gè)胖子當(dāng)著我的面吹牛振定,可吹牛的內(nèi)容都是我干的必怜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼后频,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼梳庆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起卑惜,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤膏执,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后露久,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體更米,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年毫痕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了壳快。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡镇草,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出瘤旨,到底是詐尸還是另有隱情梯啤,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布存哲,位于F島的核電站因宇,受9級(jí)特大地震影響七婴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜察滑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一打厘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贺辰,春花似錦户盯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吃靠,卻和暖如春硫眨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巢块。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國打工礁阁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人族奢。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓姥闭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親歹鱼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子泣栈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容