概述
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也在提供了初步使用版本脑蠕,支持模塊如下: