Java EE 極簡教程(五):如何理解 Spring

前言

在整個 Java 生態(tài)中,Spring 具有舉足輕重的地位瑰谜。目前以 JavaEE 作為后端的 Web 開發(fā)幾乎全部采用了 Spring 相關(guān)的技術(shù)。跟 Spring 相關(guān)的字眼有很多,它們都是什么示惊?Spring 為什么這么受歡迎奥溺?

Spring 與它的伙計們

關(guān)于 Spring辞色, 網(wǎng)上有如下幾種定義:

1.Spring Framework 是一個開源的 Java/JavaEE全功能棧(full-stack)的應(yīng)用程序框架。

2.Spring: the source for modern java.

3.Spring 是一個輕量級控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架浮定。

如今 Spring 已走過了十七八個年頭相满,其含義也逐漸發(fā)生了變化。畢竟不是寫書桦卒,關(guān)于它的歷史沿革這里就不贅述了立美。

目前而言,Spring 是用于構(gòu)建 Java 應(yīng)用的一套工具的集合方灾,包括 Spring Framework建蹄、Spring BootSpring CloudSpring Cloud Data Flow 四個部分洞慎。

一针贬、各個部分的關(guān)系

這里需要借用官網(wǎng)的幾張圖。



第一張圖拢蛋,如何完成你的 App桦他?你可以用 Spring Boot 搭建一切,用 Spring Cloud 協(xié)調(diào)一切谆棱,用 Spring Cloud Data Flow 連接一切快压。



第二張圖是 Spring Framework 5 的兩套技術(shù)棧,分別針對 Reactive 和 Servlet 風(fēng)格開發(fā)垃瞧∧枇樱可以看出,Spring Boot 處于技術(shù)棧的頂層个从,是 Spring Framework 的一部分脉幢。

過去使用 Spring,需要手動配置許多內(nèi)容嗦锐,而有了 Spring Boot嫌松,我們可以快速地搭建出基于 Spring 的開發(fā)環(huán)境,包括 Web 服務(wù)器以及大量常用的第三方庫的配置奕污,從而節(jié)省開發(fā)者的精力萎羔。

Spring Boot 也可以稱為一個框架,但它并不實現(xiàn) Spring MVC 的功能碳默,它們是不同層次的東西贾陷。也就是說,在業(yè)務(wù)方面嘱根,使用 Spring Boot 與否并不會產(chǎn)生太大改變髓废。


最后我們把各種名字含 Spring 的東西的關(guān)系捋一捋。

Spring Framework该抒,也就是我們通常所說的 Spring慌洪,包含 Spring Boot、Spring MVC 等一系列內(nèi)容柔逼,指的是一個完整的技術(shù)棧蒋譬。

Spring MVC,是基于 Spring 的 MVC 框架愉适,包含了 Spring 的功能核心犯助。

Spring Boot,是一個用于快速開發(fā)的搭建工具(腳手架)维咸,使用它搭建出來的項目可以稱為是使用了 Spring Boot 框架剂买。

Spring Cloud 惠爽,是一個基于 Spring Boot 實現(xiàn)的云應(yīng)用開發(fā)工具。

Spring Cloud Data Flow 瞬哼,也可以說是基于 Spring Boot 的工具婚肆,用于簡化專注于數(shù)據(jù)處理用例的應(yīng)用程序的開發(fā)和部署。

二坐慰、Spring 基礎(chǔ):IoC 與 AOP

Spring 的核心思想较性,即實現(xiàn)控制反轉(zhuǎn)(Inversion of Control)面向切面編程(Aspect Oriented Programming)

什么是 IoC?

通常來講结胀,我們要在 class A 中使用 class B 的對象赞咙,需要顯式地去 new 一個。比如

public class A {
    B b = new B(arg1, arg2);
}

如果 class B 發(fā)生了改變糟港,那么相應(yīng)地也需要修改 class A 的代碼攀操。在一個項目中,各個類之間的依賴關(guān)系可能十分復(fù)雜秸抚,層層相扣速和,也就是說,具有很高的 “耦合度”剥汤。

IoC 是解決這個問題的一種方法颠放,即把對象的創(chuàng)建交給一個外界的實體(也就是 Spring 的配置文件)。這樣秀姐,在我們修改了 class B 后慈迈,只需要相應(yīng)地修改配置文件若贮,就不用再管別的地方了省有。

舉個例子,假設(shè) class A 是啃的雞的顧客谴麦,class B 是炸雞蠢沿,當(dāng)顧客要吃炸雞時,只需要喊一嗓子:“Spring(啃的雞店員)匾效,給我來塊炸雞舷蟀!”就好了,炸雞的做法再怎么變面哼,也跟顧客沒有關(guān)系野宜。

實現(xiàn)控制反轉(zhuǎn)的方式主要是 DI(Dependency Injection,依賴注入)魔策,即在創(chuàng)建 class A 的對象 a 時把所需要 class B 的對象 b 注入到 a 對應(yīng)的屬性中匈子。還有一種方式叫“依賴查找”(Dependency Lookup),這里不再贅述闯袒。

什么是 AOP虎敦?

切面游岳,是一種新的模塊化機(jī)制,用來描述分散在對象其徙、類或函數(shù)中的橫切關(guān)注點胚迫。 面向切面編程,是通過預(yù)編譯方式和運(yùn)行期動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護(hù)的一種技術(shù)唾那。

上面的內(nèi)容用人話來說访锻,就是我們在項目開發(fā)中,應(yīng)該把核心業(yè)務(wù)功能(登錄闹获、CRUD 等)與周邊功能(性能統(tǒng)計朗若、日志、事務(wù)管理等)區(qū)分開昌罩。而 Spring 通過種種機(jī)制實現(xiàn)了這個要求哭懈,非常非常好非常非常棒。

假設(shè)我們需要在每執(zhí)行一步業(yè)務(wù)邏輯前后均輸出日志(如下圖茎用,出自 How2J.cn)遣总,就可以利用 AOP 的思想,把功能的執(zhí)行順序?qū)懺谂渲梦募泄旃Γ@樣業(yè)務(wù)邏輯和日志功能的代碼就可以分離開旭斥。可以說古涧,面向切面編程是一種粒度更大的面向?qū)ο缶幊獭?/p>

三垂券、Spring MVC

Spring MVC 即基于 Spring 的 MVC 框架,也是目前最為流行的 MVC 框架羡滑,沒有之一菇爪。

當(dāng)然,使用 Spring 也不一定就要使用 Spring MVC柒昏,也可以使用 Structs 等框架凳宙。然而目前 SSH(Spring + Structs + Hibernate) 框架已經(jīng)顯出頹勢了,新的應(yīng)用更多地選用 SSM(Spring + Spring MVC + Mybatis) 框架開發(fā)职祷。

Spring MVC 的核心概念氏涩,一個是 Spring,一個是 MVC有梆,這些都已經(jīng)講過了是尖,這里不再贅述。在使用它前需要經(jīng)過一些配置泥耀,百度一下即可饺汹。

關(guān)于 MVC,可以參考我的文章 —— 「JavaEE 極簡教程(四):MVC 模式」 爆袍。

下一篇我們將探討當(dāng)下如何選擇框架首繁,請看——
「JavaEE 極簡教程(六):框架的選擇」

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末作郭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子弦疮,更是在濱河造成了極大的恐慌夹攒,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胁塞,死亡現(xiàn)場離奇詭異咏尝,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)啸罢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門编检,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扰才,你說我怎么就攤上這事允懂。” “怎么了衩匣?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵蕾总,是天一觀的道長。 經(jīng)常有香客問我琅捏,道長生百,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任柄延,我火速辦了婚禮蚀浆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘搜吧。我一直安慰自己市俊,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布赎败。 她就那樣靜靜地躺著秕衙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪僵刮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天鹦牛,我揣著相機(jī)與錄音搞糕,去河邊找鬼。 笑死曼追,一個胖子當(dāng)著我的面吹牛窍仰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播礼殊,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼驹吮,長吁一口氣:“原來是場噩夢啊……” “哼针史!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起碟狞,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤啄枕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后族沃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體频祝,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年脆淹,在試婚紗的時候發(fā)現(xiàn)自己被綠了常空。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡盖溺,死狀恐怖漓糙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烘嘱,我是刑警寧澤兼蜈,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站拙友,受9級特大地震影響为狸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜遗契,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一辐棒、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧牍蜂,春花似錦漾根、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至从绘,卻和暖如春寄疏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背僵井。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工陕截, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人批什。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓农曲,卻偏偏與公主長得像,于是被迫代替她去往敵國和親驻债。 傳聞我的和親對象是個殘疾皇子乳规,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

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