Spring:一個(gè)Java框架15年的演化,頭發(fā)都學(xué)沒了

一切都從這本書開始

這本書的作者就是大名鼎鼎的Spring創(chuàng)始人,Rod Johnson,其實(shí)在寫這本書之前,Rod已經(jīng)是一個(gè)知名的Java架構(gòu)師了,還是JSR154專家組成員,負(fù)責(zé)定義Servlet2.4規(guī)范。

在這本書中Rod以其豐富的經(jīng)驗(yàn)和卓越的洞察力,指出了J2EE的長(zhǎng)處和缺點(diǎn),有理論有代碼,說服力極強(qiáng)。

在2002年的圣誕假期,另外一個(gè)Java架構(gòu)師Juergen Hoeller閱讀了這本書,如獲珍寶,一口氣讀完,還下載了書中的代碼,然后給Rod寫了一封信,原文未知,意思就是:

“ 哥們,你這是個(gè)好東東啊,書中的那些代碼已經(jīng)是個(gè)小框架了,難道你不想把他給產(chǎn)品化,搞成一個(gè)開源產(chǎn)品嗎? ”

Rod 回復(fù)說: “兄弟,我寫這本書花了我八九個(gè)月時(shí)間,我也得賺錢吃飯啊! 不過,如果你要是能保證和我一起投入的話,也許可以搞起來?!?/p>

于是兩個(gè)好基友真的搞起來了,他們倆把代碼整理以后,上傳到了sourceforge.net上面。

(聽說過sourceforge.net的可以舉個(gè)手,嗯,放下吧,估計(jì)和我一樣,是35歲以上的程序員了吧。 sourceforge.net這可是當(dāng)時(shí)最大的開源網(wǎng)站,地位如同現(xiàn)在的Github一樣。)

上傳代碼的時(shí)候遇到了難題,起個(gè)啥名呢? 要知道代碼倉庫一旦確定就沒法改名了。其中還有一個(gè)讀者在論壇上建議使用Spring, 他們倆立刻愛上了這個(gè)名字,于是Spring就誕生了!

Spring 0.9 -> 1.2

Rod 和 Juergen把大量的時(shí)間花在了Spring上面,盡了最大努力搞定一個(gè)最小的可行性的版本, 與2003 年6月發(fā)布,這就是Spring Framework 0.9。

然后他們?cè)俳釉賲枺?004年發(fā)布了真正的1.0版本。

這個(gè)時(shí)候的Spring,主要還是使用現(xiàn)在看來非常笨拙的XML Bean Definitions, 在1.2版本中,已經(jīng)開始了對(duì)注解的支持,例如@Transactional 。 當(dāng)然你必須使用JDK1. 5才可以。

注意這是在2004年,這個(gè)時(shí)候有很多人還在使用JDK 1.4.2 , 這種策略也反應(yīng)了Spring總是會(huì)擁抱新的機(jī)會(huì),擁抱新的變化。

當(dāng)時(shí)Java世界最流行的Web框架是Struts , 與此配套的是這么幾個(gè)熱門軟件:

Jetty和Tomcat都是Web Container,專門處理Servlet&JSP , Hibernate 負(fù)責(zé)O/R Mapping , Eclipse還是最熱門的IDE。

Spring呢? Spring有點(diǎn)像一個(gè)粘合劑,把Struts,Hibernate等黏合到一起,史稱SSH。

注意:這時(shí)候還沒有Spring MVC什么事兒。

第二本書和第三本書

Rod 和 Juergen 合著了另外一本書,叫做《J2EE Development without EJB》

(Juergen : “怎么不把我的頭像放上去, 我也是作者啊”)

從書名就可以看到,這時(shí)候,EJB還是很有市場(chǎng)的,要不他們倆怎么會(huì)說without EJB呢!

我就是看了這本書以后才迷上了Spring框架。

到了2005年,第3本書問世,這一本書完全以Spring為中心。這一次,一下子出現(xiàn)了5個(gè)作者,反映了Spring 在茁壯成長(zhǎng)。

(Rod Johnson站在中間,我看了半天,左二也許就是Juergen 吧)

這5個(gè)人,一邊開發(fā)Spring framework, 一邊寫書,實(shí)在是抓狂,后來他們決定把精力放到軟件開發(fā)上,以后不再寫書了。

別人想寫的話他們可以提供支持。

Spring 2.0 ~ 2.5

2006年發(fā)布Spring 2.0 , 2007年發(fā)布Spring 2.5 。

這一階段,他們不僅僅是悶頭做開發(fā),還走出去聽取大家的意見,看看大家需要什么功能。

一個(gè)非常重要的功能:基于注解的依賴注入和組件掃描( )出現(xiàn)了,這一下子就解放了碼農(nóng)們,不用辛苦地在XML中做配置了,后來還引發(fā)了一番爭(zhēng)論:究竟是注解配置好還是XML配置好?

不僅如此,在Spring MVC中也引入了像@Controller這樣的注解,這一下子讓W(xué)eb開發(fā)極為方便,Spring MVC開始攻城拔寨。

2006年,一個(gè)叫做Ruby on Rails的框架突然崛起,號(hào)稱比Java 開發(fā)快10倍,約定重于配置,Don't repeat yourself的思想隨著RoR深入人心。

Java 世界怎能沒有應(yīng)對(duì)措施? 用Java語言去寫,肯定達(dá)不到動(dòng)態(tài)語言的靈活性,于是就用Groovy這個(gè)運(yùn)行在JVM上的語言寫了一個(gè)類似RoR的框架: Grails。

Rod 和 Juergen他們的公司原來叫做interface21, 總部在英國,后來獲得風(fēng)投以后改名為SpringSource,搬到了美國, 2008年SpringSource順勢(shì)把Grails給收購了, 成功擴(kuò)大了自己的疆土。

此是的Spring 產(chǎn)品系列看起來像下圖, Spring從單一的產(chǎn)品變成了一個(gè)生態(tài)系統(tǒng)。

Spring 3.0 -> 3. 2

2009年Spring 3.0 正式發(fā)布。

這一階段的重大增強(qiáng)在Spring MVC中對(duì)RESTful的支持。 之前的Web層框架主要是Form-based ,也就是說用戶提交Form,系統(tǒng)進(jìn)行處理,渲染生成HTML。 現(xiàn)在RESTful成了非常熱門的概念,Spring對(duì)它有了完整的支持。

比較厲害的一點(diǎn)是, 在核心組件層次,和web framework 層次,Spring早期(2003,2004年)所選擇的那些抽象概念被證明還是有效的,至少是可以演進(jìn)的,甚至對(duì)于新的挑戰(zhàn),新的應(yīng)用都沒有問題 !

可以演進(jìn)的模型和架構(gòu)是非常非常厲害的。

另外也把生態(tài)系統(tǒng)中有些外圍產(chǎn)品的特性被移到核心框架當(dāng)中,例如Java Config和Sping Expression Language

這些注解,Config都經(jīng)歷了10年的考驗(yàn),非常長(zhǎng)壽,至今還是主流的使用模型。

收購!收購!收購!

2009年,SpringSource 被VMWare以4.2億美元收購,不僅如此,VMWare繼續(xù)收購了開源的消息隊(duì)列RabbitMQ,開源的緩存Redis, Gemstone等一系列著名軟件,他們組成了一個(gè)叫做vFabric Application Suite的品牌。

到了2013年, VMWare,還有它的母公司EMC,和通用電氣一起又合資建立了一個(gè)叫做Pivotal Software的公司,VMWare公司那些應(yīng)用層的軟件,包括Spring,都被轉(zhuǎn)移到了Pivotal。

2015年,Dell又收購了EMC !

這一連串商業(yè)操作確實(shí)讓人眼花繚亂, 不管如何,Spring創(chuàng)始人Rod和Juergen等人應(yīng)該獲得了非常豐厚的回報(bào)。

2012年7月,Spring創(chuàng)始人Rod Johnson離開了VMWare, 現(xiàn)在他是5個(gè)公司的董事會(huì)成員:

Neo Technology

Elasticsearch

Atomist

Meteor

Hazelcast

Spring 4.0 ~ 4.3

不管商業(yè)操作如何,Spring還是繼續(xù)發(fā)展, 2013年12月, Spring4.0 發(fā)布,這個(gè)版本開始支持JDK8 , 甚至比JDK8 的GA版本還要早3個(gè)月!

2014年出現(xiàn)了一個(gè)激動(dòng)人心的東西:Spring Boot,如果說之前的Grails還是模仿的話, Spring Boot完全是從Spring基礎(chǔ)上發(fā)展起來的,通過自動(dòng)的配置和依賴管理,極大地解放了程序員。

Spring Boot內(nèi)置了Tomcat或Jetty , 一個(gè)jar文件就可以部署,這簡(jiǎn)直就是為微服務(wù)量身定做的。

當(dāng)然,僅僅有Spring Boot還遠(yuǎn)遠(yuǎn)不足以實(shí)現(xiàn)一個(gè)微服務(wù)的系統(tǒng),還需要很多組件來實(shí)現(xiàn)這樣的功能:

服務(wù)的注冊(cè)和發(fā)現(xiàn)

負(fù)載均衡

服務(wù)的隔離和降級(jí)

......

于是,在2015年Spring Cloud出現(xiàn)了。

Spring 5.0 : 擁抱反應(yīng)式編程

到目前為止,無論是普通的form-based的MVC,還是Restful風(fēng)格的Web, 其核心都是Servlet !

Web Container 會(huì)維護(hù)一個(gè)線程池, 當(dāng)Web請(qǐng)求來了以后,從線程池取一個(gè)線程來處理,如果這個(gè)請(qǐng)求需要訪問數(shù)據(jù)庫,網(wǎng)絡(luò),那這個(gè)線程就得等著, 這就是所謂同步阻塞的模型。

當(dāng)請(qǐng)求過多,線程池用光以后,連最基本的請(qǐng)求都無法處理了。為了解決這個(gè)問題,Java 世界開始呼喚新的IO模式。

2017年9月發(fā)布的Spring 5.0 開始擁抱新的模型:異步非阻塞, 這就是Spring WebFlux。

后記

提出輕量級(jí)的J2EE開發(fā),顛覆EJB

使用注解, Java Config

Spring MVC

全面支持RESTful

Spring Boot

Spring Cloud

Spring WebFlux

......

縱觀Spring 這10多年的發(fā)展,可以說Spring一直在與時(shí)俱進(jìn),不斷面對(duì)新挑戰(zhàn),不斷推出新產(chǎn)品,這也是它能夠屹立于Java后端而不倒的原因吧 !

“我自己是一名老程序員,辭職后在線上做講師,今年我整理了一份適合2019年學(xué)習(xí)的Java編程資料干貨,從最基礎(chǔ)的面向?qū)ο蟮礁鞣N框架都有整理,送給每一位初學(xué)和進(jìn)階中學(xué)習(xí)Java編程的小伙伴。"

加QQ群:730379855(招募中)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容