歡迎光臨
每天分享高質量文章

Spring:一個Java框架15年的演化

來自:碼農翻身(微信號:coderising)

 

這篇文章來自於Spring創始人之一Juergen Hoeller在2018年的一次演講(點擊閱讀原文查看),我覺得很有意思,又加了點兒料呈現給大家,希望大家能夠喜歡。

 

一切都從這本書開始

 

 

這本書的作者就是大名鼎鼎的Spring創始人,Rod Johnson,其實在寫這本書之前,Rod已經是一個知名的Java架構師了,還是JSR154專家組成員,負責定義Servlet2.4規範。

 

在這本書中Rod以其豐富的經驗和卓越的洞察力,指出了J2EE的長處和缺點,有理論有代碼,說服力極強。

 

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

 

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

 

Rod 回覆說: “兄弟,我寫這本書花了我八九個月時間,我也得賺錢吃飯啊! 不過,如果你要是能保證和我一起投入的話,也許可以搞起來。”

 

於是兩個好基友真的搞起來了,他們倆把代碼整理以後,上傳到了sourceforge.net上面。

 

(聽說過sourceforge.net的可以舉個手,嗯,放下吧,估計和我一樣,是35歲以上的程式員了吧。 sourceforge.net這可是當時最大的開源網站,地位如同現在的Github一樣。)

 

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

 

 

Spring 0.9 -> 1.2

 

 

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

 

然後他們再接再厲,在2004年發佈了真正的1.0版本。

 

這個時候的Spring,主要還是使用現在看來非常笨拙的XML Bean Definitions, 在1.2版本中,已經開始了對註解的支持,例如@Transactional 。 當然你必須使用JDK1. 5才可以。

 

註意這是在2004年,這個時候有很多人還在使用JDK 1.4.2 , 這種策略也反應了Spring總是會擁抱新的機會,擁抱新的變化。

 

當時Java世界最流行的Web框架是Struts , 與此配套的是這麼幾個熱門軟體:

 

 

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

 

Spring呢? Spring有點像一個粘合劑,把Struts,Hibernate等黏合到一起,史稱SSH。

 

註意:這時候還沒有Spring MVC什麼事兒。

 

 

第二本書和第三本書

 

 

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

 

 

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

 

從書名就可以看到,這時候,EJB還是很有市場的,要不他們倆怎麼會說without EJB呢!

 

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

 

到了2005年,第3本書問世,這一本書完全以Spring為中心。這一次,一下子出現了5個作者,反映了Spring 在茁壯成長。

 

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

 

這5個人,一邊開發Spring framework, 一邊寫書,實在是抓狂,後來他們決定把精力放到軟體開發上,以後不再寫書了。

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

 

 

Spring 2.0 ~ 2.5

 

 

2006年發佈Spring 2.0 , 2007年發佈Spring 2.5 。 

 

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

 

一個非常重要的功能:基於註解的依賴註入和組件掃描(   )出現了,這一下子就解放了碼農們,不用辛苦地在XML中做配置了,後來還引發了一番爭論:究竟是註解配置好還是XML配置好?

 

不僅如此,在Spring MVC中也引入了像@Controller這樣的註解,這一下子讓Web開發極為方便,Spring MVC開始攻城拔寨

 

2006年,一個叫做Ruby on Rails的框架突然崛起,號稱比Java 開發快10倍,約定重於配置,Don’t repeat yourself的思想隨著RoR深入人心。

 

Java 世界怎能沒有應對措施? 用Java語言去寫,肯定達不到動態語言的靈活性,於是就用Groovy這個運行在JVM上的語言寫了一個類似RoR的框架: Grails。

 

 

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

 

此是的Spring 產品系列看起來像下圖, Spring從單一的產品變成了一個生態系統。

 

 

 

Spring 3.0 -> 3. 2

 

 

2009年Spring 3.0 正式發佈。

 

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

 

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

 

可以演進的模型和架構是非常非常厲害的。

 

另外也把生態系統中有些外圍產品的特性被移到核心框架當中,例如Java Config和Sping Expression Language

 

這些註解,Config都經歷了10年的考驗,非常長壽,至今還是主流的使用模型。

 

 

收購!收購!收購!

 

 

2009年,SpringSource 被VMWare以4.2億美元收購,不僅如此,VMWare繼續收購了開源的訊息佇列RabbitMQ,開源的快取Redis, Gemstone等一系列著名軟體,他們組成了一個叫做vFabric Application Suite的品牌。

 

到了2013年, VMWare,還有它的母公司EMC,和通用電氣一起又合資建立了一個叫做Pivotal Software的公司,VMWare公司那些應用層的軟體,包括Spring,都被轉移到了Pivotal。

 

2015年,Dell又收購了EMC !

 

這一連串商業操作確實讓人眼花繚亂, 不管如何,Spring創始人Rod和Juergen等人應該獲得了非常豐厚的回報。

 

2012年7月,Spring創始人Rod Johnson離開了VMWare, 現在他是5個公司的董事會成員:

Neo Technology

Elasticsearch

Atomist

Meteor

Hazelcast

 

 

Spring 4.0 ~ 4.3

 

 

不管商業操作如何,Spring還是繼續發展, 2013年12月, Spring4.0 發佈,這個版本開始支持JDK8 , 甚至比JDK8 的GA版本還要早3個月!

 

2014年出現了一個激動人心的東西:Spring Boot,如果說之前的Grails還是模仿的話, Spring Boot完全是從Spring基礎上發展起來的,通過自動的配置和依賴管理,極大地解放了程式員。

 

Spring Boot內置了Tomcat或Jetty , 一個jar檔案就可以部署,這簡直就是為微服務量身定做的。

 

當然,僅僅有Spring Boot還遠遠不足以實現一個微服務的系統,還需要很多組件來實現這樣的功能:

 

服務的註冊和發現

負載均衡

服務的隔離和降級

……

於是,在2015年Spring Cloud出現了。

 

 

Spring 5.0 : 擁抱反應式編程

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

 

Web Container 會維護一個執行緒池, 當Web請求來了以後,從執行緒池取一個執行緒來處理,如果這個請求需要訪問資料庫,網絡,那這個執行緒就得等著, 這就是所謂同步阻塞的模型。

 

當請求過多,執行緒池用光以後,連最基本的請求都無法處理了。為瞭解決這個問題,Java 世界開始呼喚新的IO樣式。

 

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

 

 

後記

 

 

提出輕量級的J2EE開發,顛覆EJB

使用註解, Java Config

Spring MVC

全面支持RESTful

Spring Boot

Spring Cloud

Spring WebFlux

……

 

縱觀Spring 這10多年的發展,可以說Spring一直在與時俱進,不斷面對新挑戰,不斷推出新產品,這也是它能夠屹立於Java後端而不倒的原因吧 !

 


●編號900,輸入編號直達本文

●輸入m獲取文章目錄

推薦↓↓↓

 

程式員求職面試

更多推薦25個技術類公眾微信

涵蓋:程式人生、演算法與資料結構、黑客技術與網絡安全、大資料技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

    赞(0)

    分享創造快樂