我眼中的Spring Boot

毋庸置疑钓株,Spring Boot在眾多從事Java微服務(wù)開發(fā)的程序員群體中是一個(gè)很特別的存在餐禁。說它特別是因?yàn)樗_實(shí)簡(jiǎn)化了基于Spring技術(shù)棧的應(yīng)用/微服務(wù)開發(fā)過程氯析,使得我們能夠很快速地就搭建起一個(gè)應(yīng)用的腳手架并在其上進(jìn)行項(xiàng)目的開發(fā)弃锐,再也不用像以前那樣使用大量的XML或是注解了懦铺,應(yīng)用在這樣的約定優(yōu)于配置的前提下可以以最快的速度創(chuàng)建出來。

Spring Boot從這一點(diǎn)來說極大解放了開發(fā)者贯要,使得開發(fā)者從之前繁瑣的配置中解脫出來暖侨,轉(zhuǎn)而專注于應(yīng)用的業(yè)務(wù)邏輯開發(fā)。這樣崇渗,我們的系統(tǒng)的開發(fā)周期就會(huì)大大縮短字逗,交付周期也越來越頻繁了,這同樣也是Spring Boot為我們廣大開發(fā)者所帶來的巨大好處宅广。我們可以盡情享受這樣一個(gè)優(yōu)秀框架在方方面面所帶來的功能扳肛,甚至很多功能都可以做到開箱即用,只需在POM或是build.gradle中簡(jiǎn)單配置一下即可乘碑,相比于之前的Spring MVC等傳統(tǒng)的Web開發(fā)模式來說簡(jiǎn)化了太多太多。

總的來說金拒,Spring Boot在如下幾個(gè)方面為我們帶來了巨大的效能提升:

  • 約定優(yōu)于配置兽肤。按照Spring Boot的方式進(jìn)行簡(jiǎn)單的配置后,功能就可以直接使用了绪抛。
  • 自動(dòng)裝配资铡。Spring Boot在啟動(dòng)時(shí)會(huì)自動(dòng)探測(cè)類路徑下的各種類型,實(shí)現(xiàn)類型的自動(dòng)裝配幢码,無需開發(fā)者再通過XML或是注解進(jìn)行顯式的類型裝配了笤休,這一點(diǎn)要拜@EnableAutoConfiguration注解或是更為全面的@SpringBootApplication注解所賜。
  • 內(nèi)嵌各種Servlet容器症副。Spring Boot內(nèi)嵌了Tomcat店雅、Jetty與Undertow等Servlet容器政基,使得我們可以像開發(fā)普通的Java應(yīng)用那樣直接通過main方法來啟動(dòng)容器,甚至可以直接通過jar包而非war包的形式就能夠?qū)崿F(xiàn)快速部署闹啦,不必再依賴于外部的Servlet容器沮明。
  • yml配置的支持。yml或是yaml的全稱是YAML Ain't Markup Language的簡(jiǎn)稱(有意思的是窍奋,當(dāng)初在開發(fā)這門語言時(shí)荐健,其簡(jiǎn)稱實(shí)際上是Yet Another Markup Language),新的簡(jiǎn)稱采取了遞歸的方式琳袄。這種新的語言可以看作是傳統(tǒng)的properties配置文件的一種有益補(bǔ)充江场,它通過縮進(jìn)的方式來表示層次化的配置項(xiàng),相比于傳統(tǒng)的properties屬性文件來說窖逗,其層次感會(huì)更好一些址否;當(dāng)然,順便也可以讓我們少敲一些字母滑负。
  • 提供了各種starter便于功能的開箱即用在张。圍繞著Spring Boot生態(tài)圈目前已經(jīng)涌現(xiàn)出了不計(jì)其數(shù)的starter,這樣我們只需將相應(yīng)的starter配置項(xiàng)引入到項(xiàng)目中即可很方便地使用對(duì)應(yīng)的功能矮慕。
  • 提供了各種度量帮匾。Spring Boot提供了各種度量屬性,便于我們查看當(dāng)前項(xiàng)目的運(yùn)行情況以及系統(tǒng)使用情況痴鳄。

Spring Boot所提供的功能非常之多瘟斜,上面不過是列舉出了它諸多功能的幾個(gè)方面而已。

不過痪寻,這篇文章的主旨卻并不在Spring Boot所提供的如此之多的功能特性上螺句,而是從一個(gè)開發(fā)者視角來分析學(xué)習(xí)和使用Spring Boot時(shí)我們?cè)撊绾稳プ觯粨Q句話說橡类,我認(rèn)為正確的學(xué)習(xí)路徑和曲線應(yīng)該是怎樣的蛇尚。

下面是我經(jīng)過一段時(shí)間的仔細(xì)觀察,發(fā)現(xiàn)很多開發(fā)者在學(xué)習(xí)和使用Spring Boot時(shí)所存在的嚴(yán)重誤區(qū):

  1. Spring Boot非常方便顾画,簡(jiǎn)單取劫,拿來就用。這是Spring Boot自身的優(yōu)良特性給開發(fā)人員所帶來的最大的一個(gè)誤解研侣。誠然谱邪,在我們剛開始上手Spring Boot時(shí),只需要短短10分鐘左右的時(shí)間就能讓一個(gè)Web應(yīng)用運(yùn)行起來庶诡,這只要按照Spring Boot官方網(wǎng)站的示例跟著做下來即可惦银。當(dāng)這個(gè)簡(jiǎn)單的示例應(yīng)用成功運(yùn)行起來后,你會(huì)發(fā)現(xiàn)自己幾乎沒寫什么代碼,配置更是只是加上了幾個(gè)注解就行了扯俱。在這樣的前提下书蚪,應(yīng)用竟然就能正常運(yùn)行起來了,神不神奇蘸吓,牛不牛逼善炫。

于是,你認(rèn)為Spring Boot果然是神器啊库继,果然是簡(jiǎn)單啊箩艺,果然是方便啊。在這個(gè)示例的基礎(chǔ)上再增加點(diǎn)功能貌似也是比較輕松的宪萄,再加一個(gè)url mapping艺谆,嚯,可以訪問到了拜英,嘎嘎静汤。

所以,你得出了這樣一個(gè)結(jié)論:Spring Boot從入門到精通只需要一天時(shí)間即可居凶。

騷年虫给,你咋這么幼稚不成熟呢?

Spring Boot的本質(zhì)是什么侠碧?Spring Boot官網(wǎng)明確表示自己不提供任何新的特性與功能抹估,只是將之前傳統(tǒng)的基于Spring的開發(fā)進(jìn)行了簡(jiǎn)化,便于開發(fā)者上手弄兜。

看到了么药蜻,這里的要點(diǎn)是什么?

Spring復(fù)雜么替饿?當(dāng)然復(fù)雜了语泽,那為什么我們用Spring Boot進(jìn)行開發(fā)時(shí)卻感受不到這種復(fù)雜性呢?

答案當(dāng)然是Spring Boot將這種復(fù)雜性封裝起來了视卢。一個(gè)框架或是系統(tǒng)如果是復(fù)雜的踱卵,那么這種復(fù)雜性就會(huì)存在兩種地方:

將復(fù)雜性全部封裝起來,對(duì)使用者暴露簡(jiǎn)單的使用接口据过。

將復(fù)雜性暴露給使用者颊埃。

復(fù)雜系統(tǒng)無它,上述兩點(diǎn)而已蝶俱。

對(duì)于Spring Boot來說,顯然它采取的是第一種策略饥漫,即將復(fù)雜性封裝起來榨呆,向使用者暴露簡(jiǎn)單的接口,讓開發(fā)者能夠快速上手庸队。

但顯然积蜻,我們所開發(fā)的系統(tǒng)不可能是那么簡(jiǎn)單的闯割,它或多或少地需要使用很多其他很多技術(shù),當(dāng)這些技術(shù)被集成到Spring Boot中時(shí)竿拆,很多問題就開始暴露出來了宙拉,這時(shí)的你如果沒有扎實(shí)的基礎(chǔ),就會(huì)陷入遇到一個(gè)問題就到處搜結(jié)果的窘境丙笋,結(jié)果造成一天下來疲于搜索答案谢澈。經(jīng)過了一段時(shí)間,你可能會(huì)反問自己:這是我要的Spring Boot么御板?怎么感覺還不如使用傳統(tǒng)的Spring MVC開發(fā)速度快呢锥忿?

當(dāng)我們使用傳統(tǒng)的開發(fā)模式時(shí),大多數(shù)內(nèi)容都是我們自己來設(shè)置的怠肋;在這種情況下敬鬓,系統(tǒng)出現(xiàn)了問題后,我們能夠比較快地定位到問題所在笙各;然而钉答,在Spring Boot中,因?yàn)橐磺卸际亲詣?dòng)裝配的杈抢,因此一旦出現(xiàn)問題数尿,定位問題就是一個(gè)非常耗時(shí)耗力的事情。

  1. 學(xué)習(xí)Spring Boot不需要對(duì)Spring有太深入的了解和學(xué)習(xí)春感。一般來說砌创,但凡有這種想法的人大多數(shù)都是沒有接觸過傳統(tǒng)的Spring MVC或是Spring開發(fā)的年輕程序員,他們一上來使用的就是Spring Boot框架鲫懒,開發(fā)了幾個(gè)項(xiàng)目后就得出了這樣的結(jié)論嫩实。

在我們使用基于Spring技術(shù)棧的框架時(shí),無論使用的框架是什么窥岩,Spring永遠(yuǎn)都是基礎(chǔ)甲献,永遠(yuǎn)都處于根基的位置。沒有對(duì)Spring的深入理解和學(xué)習(xí)颂翼,你使用構(gòu)建于其上的任何框架都只不過是水中月晃洒,鏡中花而已,經(jīng)不起任何推敲朦乏。也許你對(duì)框架的API球及、類、方法都比較了解呻疹,知道怎么用吃引,但你有沒有想過,這些東西對(duì)于經(jīng)驗(yàn)豐富的Spring開發(fā)者來說,掌握起來速度其實(shí)是很快的镊尺,而且更加扎實(shí)朦佩。畢竟,Spring是這一切的根源庐氮,對(duì)于Spring有了深入的理解與認(rèn)知后语稠,再來反觀構(gòu)建于其上的各種應(yīng)用層框架,你會(huì)有完全不同的感受的弄砍。

  1. Spring Boot的配置方式簡(jiǎn)單仙畦,更加優(yōu)越。我相信输枯,這也是很多開發(fā)者在使用Spring Boot時(shí)所得出的一個(gè)結(jié)論议泵。但是,我想問題的是桃熄,YAML真的就比properties強(qiáng)大很多么(當(dāng)然先口,Spring Boot對(duì)于這兩種方式都是支持的)。如果你的配置項(xiàng)很多瞳收,而且都放到了application.yml中時(shí)(特別地碉京,將各種profile配置也都放到了這里),那你再來看看你的yml文件螟深,你還會(huì)有良好的心情么谐宙?

  2. Spring Boot項(xiàng)目一旦出現(xiàn)問題,特別是那種自動(dòng)配置出現(xiàn)問題界弧,或是同一個(gè)類型有幾個(gè)對(duì)應(yīng)項(xiàng)時(shí)凡蜻,排查起來不是那么容易的事情,尤其在項(xiàng)目規(guī)模比較龐大時(shí)更是如此垢箕。這就需要你對(duì)Spring Boot的底層有良好的掌握與認(rèn)知才能較快地找出問題所在划栓。

  3. 配置的加載。我相信很多做Spring Boot開發(fā)的程序員們都讀過網(wǎng)上關(guān)于Spring Boot配置信息加載優(yōu)先級(jí)的文章条获。姑且不論這些文章的正確與否忠荞,你是否真正理解了配置信息優(yōu)先級(jí)問題,Spring Boot是如何處理配置信息的加載優(yōu)先級(jí)的帅掘。

對(duì)Spring Boot的誤解太多委煤,這里面僅列出上述五條。

那么修档,問題到底出在哪里呢碧绞?顯然,問題的根源不在Spring Boot吱窝,那就在你自身嘍头遭。

還是那句話寓免,Spring Boot絕不是一個(gè)可以速成的框架,我們雖然可以快速上手Spring Boot计维,用它做一些簡(jiǎn)單的示例或是項(xiàng)目,但是當(dāng)項(xiàng)目規(guī)模變大時(shí)撕予,如果沒有良好的基礎(chǔ)鲫惶,你是無法很好地駕馭它的;Spring Boot絕非一個(gè)簡(jiǎn)單的框架实抡,它是諸多模式欠母、思想、經(jīng)驗(yàn)的集大成者吆寨。但赏淌,雖然它將復(fù)雜性隱藏了起來,我們?cè)趯?shí)際開發(fā)中依然會(huì)遇到形形色色的問題啄清,這時(shí)的你若是具備優(yōu)秀的Spring和Spring Boot基礎(chǔ)六水,那么問題的解決就是一個(gè)快速提升的過程,否則有些問題不是簡(jiǎn)單搜索一下網(wǎng)上資料就能搞得定的辣卒。

如果你做過大規(guī)模的Spring Boot項(xiàng)目掷贾,我相信你會(huì)認(rèn)同我上述的觀點(diǎn)的。

無它荣茫,唯手熟爾想帅。

Spring Boot是一個(gè)極為優(yōu)秀的框架,優(yōu)秀的框架需要我們也能配得上啡莉,這就需要我們首先將自己變成一個(gè)優(yōu)秀的Spring與Spring Boot開發(fā)者港准,探究本源,這樣才能得心應(yīng)手咧欣,行走在技術(shù)的前沿浅缸。


作者簡(jiǎn)介:張龍,系統(tǒng)架構(gòu)師该押,資深培訓(xùn)講師疗杉,圣思園教育創(chuàng)辦者,譯者蚕礼。譯有《復(fù)雜性思考》烟具、《iPhone游戲開發(fā)》、《精通lambda表達(dá)式:Java多核編程》奠蹬、《設(shè)計(jì)原本》朝聋、《Python并行編程手冊(cè)》等20余本譯作;喜好研究技術(shù)囤躁,對(duì)系統(tǒng)底層有濃厚的興趣冀痕。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荔睹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子言蛇,更是在濱河造成了極大的恐慌僻他,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腊尚,死亡現(xiàn)場(chǎng)離奇詭異吨拗,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)婿斥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門劝篷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人民宿,你說我怎么就攤上這事娇妓。” “怎么了活鹰?”我有些...
    開封第一講書人閱讀 163,187評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵哈恰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我华望,道長(zhǎng)蕊蝗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,264評(píng)論 1 292
  • 正文 為了忘掉前任赖舟,我火速辦了婚禮蓬戚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宾抓。我一直安慰自己子漩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評(píng)論 6 390
  • 文/花漫 我一把揭開白布石洗。 她就那樣靜靜地躺著幢泼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讲衫。 梳的紋絲不亂的頭發(fā)上缕棵,一...
    開封第一講書人閱讀 51,231評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音涉兽,去河邊找鬼招驴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛枷畏,可吹牛的內(nèi)容都是我干的别厘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,116評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拥诡,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼触趴!你這毒婦竟也來了氮发?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤冗懦,失蹤者是張志新(化名)和其女友劉穎爽冕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體披蕉,經(jīng)...
    沈念sama閱讀 45,367評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扇售,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嚣艇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,754評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡华弓,死狀恐怖食零,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寂屏,我是刑警寧澤贰谣,帶...
    沈念sama閱讀 35,458評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站迁霎,受9級(jí)特大地震影響吱抚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜考廉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評(píng)論 3 327
  • 文/蒙蒙 一秘豹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧昌粤,春花似錦既绕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至袱讹,卻和暖如春疲扎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捷雕。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評(píng)論 1 269
  • 我被黑心中介騙來泰國打工椒丧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人非区。 一個(gè)月前我還...
    沈念sama閱讀 47,797評(píng)論 2 369
  • 正文 我出身青樓瓜挽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親征绸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子久橙,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評(píng)論 2 354

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