“Don't Reinvent the Wheel”這句話,你從哪兒聽來的?
當(dāng)前位置:點(diǎn)晴教程→閑情逸致
→『 微信好文 』
這事還是發(fā)生在 16 年前。 在 Java EE 和 EJB 大行其道的時(shí)候,一個學(xué)音樂的小伙子公然吐槽 EJB 太過臃腫,絕大多數(shù)的 J2EE 應(yīng)用根本不需要 EJB。 為了證明自己獨(dú)特的想法,這位小伙子在當(dāng)年出了一本書,在書中吐槽指出了 Java EE 和 EJB 組件框架中存在的一些主要缺陷,并提出了一個基于 Java 類和依賴注入的更簡單的解決方案。 更有意思的是,書中展示了如何在不使用 EJB 的情況下構(gòu)建高質(zhì)量、可擴(kuò)展的在線座位預(yù)留系統(tǒng)。 為了構(gòu)建應(yīng)用程序,他編寫了超過 30,000 行的基礎(chǔ)結(jié)構(gòu)代碼,項(xiàng)目中的根包命名為 com.interface21,所以人們最初稱這套開源框架為 interface21。 在這本書發(fā)布后,一對一的 J2EE 設(shè)計(jì)和開發(fā)一炮而紅。書中免費(fèi)提供的大部分基礎(chǔ)架構(gòu)代碼都是高度可重用的。 2003 年,這位小伙子和朋友在此框架的基礎(chǔ)上開發(fā)了一個全新的框架命名為 Spring。 當(dāng)時(shí),據(jù)他們介紹 Spring 是傳統(tǒng) J2EE 新的開始,之后 Spring 發(fā)展進(jìn)入快車道,在這十幾年中,不斷發(fā)展也不斷紅火起來。 2004 年 03 月,發(fā)布 Spring 1.0。 2006 年 10 月,發(fā)布 Spring 2.0。 2007 年 11 月,更名為 SpringSource,同時(shí)發(fā)布了 Spring 2.5。 2009 年 12 月,發(fā)布 Spring 3.0。 2013 年 12 月,發(fā)布 Spring 4.0。 2017 年 09 月,發(fā)布 Spring 5.0。 而這個小伙子就是 Rod Johnson ,他在 IT 界大展宏圖之前,早已是一個擁有音樂學(xué)博士學(xué)位的跨界奇才。
Don''t Reinvent the Wheel 「不要重復(fù)造輪子」,這是 IT 圈的人經(jīng)常聽到的一句諺語,很多 Leader 常把這句話掛在嘴邊。 最直接地理解是:有的項(xiàng)目或功能,別人已經(jīng)做過了,我們需要用的時(shí)候,直接拿來用就可以,并不需要重新發(fā)明創(chuàng)造。 Rod Johnson 明確地告知我們, Spring 就是基于「Don''t Reinvent the Wheel」原則做起來的。 這也是吐槽 EJB 的關(guān)鍵點(diǎn),于是 Spring 和這句諺語在全世界范圍內(nèi)逐漸火了起來。 Spring 是「配置地獄」? 多年以來,Spring 平臺飽受非議的一點(diǎn)就是大量的 XML 配置以及復(fù)雜的依賴管理。 隨著使用 Spring 進(jìn)行開發(fā)的個人和企業(yè)越來越多,Spring 也慢慢從一個單一簡潔的小框架變成一個大而全的開源軟件。 Spring 的邊界不斷進(jìn)行擴(kuò)充,到了后來 Spring 幾乎可以做任何事情,市面上主流的開源軟件、中間件都有 Spring 對應(yīng)組件支持,人們在享用 Spring 的便利之后,也遇到了一些問題。 Spring 每集成一個開源軟件,就需要增加一些基礎(chǔ)配置,隨著開發(fā)項(xiàng)目的逐漸龐大,往往需要集成很多開源軟件。 后期使用 Spring 開發(fā)大型項(xiàng)目需要引入很多配置文件,導(dǎo)致配置工作難以理解且出錯率高,到了后來人們甚至稱 Spring 為配置地獄。 在 2013 年的 SpringOne 2GX 會議上,Pivotal 的 CTO Adrian Colyer 回應(yīng)了這些批評,并且特別提到該平臺將來的目標(biāo)之一就是實(shí)現(xiàn)免 XML 配置的開發(fā)體驗(yàn)。 這就是 Spring Boot 產(chǎn)生的原因之一,但 Spring Boot 所實(shí)現(xiàn)的功能超出了這個任務(wù)的描述,開發(fā)人員不僅不再需要編寫 XML,而且在一些場景中甚至不需要編寫繁瑣的 import 語句。 在微服務(wù)的概念也慢慢興起,快速開發(fā)微小獨(dú)立的應(yīng)用變得更為急迫,Spring 剛好處在這樣一個交叉點(diǎn)上。 于 2013 年初啟動了 Spring Boot 項(xiàng)目的研發(fā)。2014 年,Spring Boot 伴隨著 Spring 4.0 誕生發(fā)布了第一個正式版本。 Spring Boot 并不是要成為 Spring 平臺里面眾多「Foundation」層項(xiàng)目的替代者。 Spring Boot 的目標(biāo)不在于為已解決的問題域提供新的解決方案,而是為平臺帶來另一種開發(fā)體驗(yàn),從而簡化對這些已有技術(shù)的使用。 對于已經(jīng)熟悉 Spring 生態(tài)系統(tǒng)的開發(fā)人員來說,Spring Boot 是一個很理想的選擇。 對于采用 Spring 技術(shù)的新人來說,Spring Boot 提供一種更簡潔的方式來使用這些技術(shù)。 簡單才是編程之美 正是因?yàn)?Spring Boot 簡化的配置和眾多的 Starters 才讓 Spring Boot 變得簡單、易用、快速上手。 也可以說正是約定優(yōu)于配置的思想徹底落地才讓 Spring Boot 走向輝煌。 Spring Boot 約定優(yōu)于配置的思想讓 Spring Boot 項(xiàng)目非常容易上手,讓編程變得更簡單,其實(shí)編程本該很簡單,簡單才是編程的美。 約定優(yōu)于配置(Convention Over Configuration),也稱作按約定編程,是一種軟件設(shè)計(jì)范式,旨在減少軟件開發(fā)人員需做決定的數(shù)量、獲得簡單的好處,而又不失靈活性。 本質(zhì)是說,開發(fā)人員僅需規(guī)定應(yīng)用中不符約定的部分。例如,如果模型中有個名為 User 的類,那么數(shù)據(jù)庫中對應(yīng)的表就會默認(rèn)命名為 user。 只有在偏離這一約定時(shí),例如將該表命名為“user_info”,才需寫有關(guān)這個名字的配置。 在 Spring 體系中,Spring Boot JPA 就是約定優(yōu)于配置最佳實(shí)現(xiàn)之一。 不需要關(guān)注表結(jié)構(gòu),我們約定類名即是表名,屬性名即是表的字段。 String 對應(yīng) varchar,long 對應(yīng) bigint,只有需要一些特殊要求的屬性,我們再單獨(dú)進(jìn)行配置,按照這個約定我們可以將以前的工作大大簡化。 Spring Boot 體系將約定優(yōu)于配置的思想展現(xiàn)得淋漓盡致,小到配置文件、中間件的默認(rèn)配置,大到內(nèi)置容器、生態(tài)中的各種 Starters 無不遵循此設(shè)計(jì)規(guī)則。 Spring Boot 鼓勵各軟件組織方創(chuàng)建自己的 Starter,創(chuàng)建 Starter 的核心組件之一就是 autoconfigure 模塊,也是 Starter 的核心功能,在啟動的時(shí)候進(jìn)行自動裝配,屬性默認(rèn)化配置。 Spring、Spring Boot 和 Spring Cloud 的關(guān)系 Spring 最初核心的兩大核心功能 Spring IoC 和 Spring Aop 成就了 Spring。 Spring 在這兩大核心功能上不斷地發(fā)展,才有了 Spring 事務(wù)、Spring MVC 等一系列偉大的產(chǎn)品。 最終成就了 Spring 帝國,到了后期 Spring 幾乎可以解決企業(yè)開發(fā)中的所有問題。 Spring Boot 是在強(qiáng)大的 Spring 帝國生態(tài)基礎(chǔ)上面發(fā)展而來,發(fā)明 Spring Boot 不是為了取代 Spring,是為了讓人們更容易的使用 Spring。 所以說沒有 Spring 強(qiáng)大的功能和生態(tài),就不會有后期 Spring Boot 的火熱。 Spring Boot 使用約定優(yōu)于配置的理念,重新重構(gòu)了 Spring 的使用,讓 Spring 后續(xù)的發(fā)展更有生命力。 Spring 并沒有重復(fù)制造輪子,它只是將目前各家公司開發(fā)的比較成熟、經(jīng)得起實(shí)際考驗(yàn)的服務(wù)框架組合起來。 通過 Spring Boot 風(fēng)格進(jìn)行再封裝并屏蔽掉復(fù)雜的配置和實(shí)現(xiàn)原理,最終給開發(fā)者提供了一套簡單易懂、易部署、易維護(hù)的分布式系統(tǒng)開發(fā)工具包。 Spring Cloud 是一系列框架的有序集合,它利用 Spring Boot 的開發(fā)便利性巧妙地簡化了分布式系統(tǒng)基礎(chǔ)設(shè)施的開發(fā)。 服務(wù)發(fā)現(xiàn)注冊、配置中心、消息總線、負(fù)載均衡、斷路器、數(shù)據(jù)監(jiān)控等,都可以用 Spring Boot 的開發(fā)風(fēng)格做到一鍵啟動和部署。 Spring Cloud 是為了解決微服務(wù)架構(gòu)中服務(wù)治理而提供的具備一系列功能的開發(fā)框架,并且 Spring Cloud 是完全基于 Spring Boot 而開發(fā)。 Spring Cloud 利用 Spring Boot 特性整合了開源行業(yè)中優(yōu)秀的組件,整體對外提供了一套在微服務(wù)架構(gòu)中服務(wù)治理的解決方案。 綜上我們可以這樣來理解,正是由于 Spring IoC 和 Spring Aop 兩個強(qiáng)大的功能才有了 Spring。 Spring 生態(tài)不斷的發(fā)展才有了 Spring Boot,使用 Spring Boot 讓 Spring 更易用更有生命力,Spring Cloud 是基于 Spring Boot 開發(fā)的一套微服務(wù)架構(gòu)下的服務(wù)治理方案。 總結(jié) Spring Boot 誕生一方面是因?yàn)?Spring 自身發(fā)展所遇到的問題,另一方面在微服務(wù)思想誕生之際,急需要一款快速開發(fā)工具來實(shí)現(xiàn)微服務(wù)技術(shù)落地,在這樣的背景下誕生了 Spring Boot。 Spring Boot 整體的設(shè)計(jì)思想是:約定優(yōu)于配置。依賴此設(shè)計(jì)思路,Spring Boot 進(jìn)行了大刀闊斧的改革,讓開發(fā)、測試、部署更為便捷。 眾多的 Starters 成就了 Spring Boot 的發(fā)展,讓使用 Spring Boot 開發(fā)項(xiàng)目變得更加簡單。 延伸閱讀: 4. Spring 團(tuán)隊(duì)撰寫的方法和技巧指南 該文章在 2018/9/13 10:20:45 編輯過 |
相關(guān)文章
正在查詢... |