Spring實戰(zhàn)-看書心得

Spring實戰(zhàn):

以前是學(xué)集成電路的拾积,工作之后成了一枚java程序猿殉挽,記得第一次接觸企業(yè)級應(yīng)用開發(fā)丰涉,對于Spring容器、 bean斯碌、bean的裝配一死、應(yīng)用上下文、依賴注入傻唾、控制反轉(zhuǎn)等等非常核心的概念經(jīng)常是一臉懵逼的狀態(tài)投慈,最近看了Spring實戰(zhàn)講述的兩個Spring核心技術(shù),看的過程中其實還是懵逼的冠骄,不過重復(fù)看了幾遍對概念理解了伪煤,之后發(fā)現(xiàn)以前總是困擾自己的問題已經(jīng)不再是問題,所以寫了這邊文章講一下自己對這些關(guān)鍵詞的理解凛辣,一方面加深自己的理解抱既,另一方面用一個通俗的大白話將自己的理解表述出來希望能幫到一些剛?cè)胄械耐瑢W(xué),希望有所幫助扁誓。

了解某種技術(shù)之前首先要知道它為什么出現(xiàn)防泵,它的出現(xiàn)是為了解決什么問題?-------Spring是為了解決企業(yè)級應(yīng)用開發(fā)的復(fù)雜性即簡化java開發(fā)而創(chuàng)建的蝗敢。

Spring的核心是依賴注入(DI)和面向切面編程(AOP)捷泞。

任何一個有實際意義的應(yīng)用,都會有多個類組成寿谴,這些類相互之間盡心協(xié)作來完成特定的業(yè)務(wù)邏輯肚邢。按照傳統(tǒng)做法,每個對象本身負(fù)責(zé)管理與自身協(xié)作的對象的引用(即他所依賴的類的實例)拭卿,這將導(dǎo)致類與類之間高度耦合和難以測試的代碼骡湖,這種代碼難以復(fù)用,難于理解峻厚,而且典型的會表現(xiàn)出打地鼠是的bug特性响蕴。但另一方面,一定程度上的耦合又是必須的惠桃。通過DI浦夷,對象以及對象之間的依賴關(guān)系完全交由第三方進(jìn)行處理,對象無需自行創(chuàng)建或者管理他們之間的依賴關(guān)系(一般選擇的做法是辜王,如果類A需要依賴類B劈狐,一般將類B實現(xiàn)的接口定義為類A的屬性,這樣做的目的是呐馆,對象只是通過接口(而非具體的類實現(xiàn))來標(biāo)明依賴關(guān)系肥缔,那么這種依賴就能夠在對象本身毫不知情的情況下,用不同的具體實現(xiàn)進(jìn)行替換)汹来。在基于Spring的應(yīng)用中续膳,Spring容器負(fù)責(zé)創(chuàng)建對象改艇,裝配對象、配置并管理他們的整個生命周期坟岔,從生存到死亡谒兄,常見的容器為應(yīng)用上下文(Application Context)。

DI能夠允許相互協(xié)作的軟件組件保持松散耦合社付,而面向切面編程則允許你把遍布應(yīng)用各處的功能分離出來形成可重用的組件承疲。

①看書心得:

大概掃過一些主要內(nèi)容之后,返回來看第一章鸥咖,發(fā)現(xiàn)Spring可以和一個公司的進(jìn)行類比,這個公司包含了所有的職能部門以及各種成熟的規(guī)章制度流程。開發(fā)過程可以理解為公司要開始進(jìn)行運行一個業(yè)務(wù)熙兔,開發(fā)人員就是這個業(yè)務(wù)對應(yīng)的唯一拍板領(lǐng)導(dǎo)住涉,領(lǐng)導(dǎo)不必事無巨細(xì),只需要定義業(yè)務(wù)運行中需要什么樣的人才(bean)(這個過程可能也包含了人與人之間的協(xié)作媳握,類比為你定義的類A依賴類B)蛾找,具體的就可以交公司即Spring進(jìn)行具體的管理打毛,公司不能滿足你的需求時幻枉,領(lǐng)導(dǎo)還可以找外包公司即集成第三方框架來完成任務(wù)诡蜓。

開發(fā)人員--------領(lǐng)導(dǎo)罗珍,leader覆旱;

應(yīng)用上下文------Spring容器的一種扣唱,負(fù)責(zé)bean的創(chuàng)建噪沙,裝配正歼,銷毀等喜爷,類比為秘書或者總經(jīng)理檩帐,assistant湃密;

bean--------------領(lǐng)導(dǎo)定義的具備某種素質(zhì)的員工,其實就是我們定義的類的實例俩由,employee癌蚁;

bean的裝配-----Spring容器負(fù)責(zé)管理的碘梢,協(xié)調(diào)員工和員工之間的協(xié)作伐蒂,類A依賴類B恩沛,秘書直接將符合條件的B類實例指派給A類實例雷客,這個過程開發(fā)人并不需要關(guān)心如何實現(xiàn)搅裙,cooperation部逮;

依賴注入---------就是bean裝配的過程掐禁,即將類B的實例注入類A的過程傅事。

首先對于DI灼芭,Spring中是通過容器(如bean工廠或者應(yīng)用上下文彼绷,前者最簡單寄悯,提供基本的DI支持脆栋,對大多數(shù)應(yīng)用來說比較低級椿争;后者基于beanFactory構(gòu)建,并提供應(yīng)用框架級別的服務(wù)柠逞,如從屬性文件解析文本信息以及發(fā)布用用事件給感興趣的事件監(jiān)聽者板壮,比前者更受歡迎)管理bean的,包括bean的創(chuàng)建、生命周期阱表、銷毀等,應(yīng)用上下文就可以類比為領(lǐng)導(dǎo)的秘書爱致,開發(fā)人員是核心領(lǐng)導(dǎo),每個bean就可以類比為公司中的螺絲釘員工互艾,開發(fā)人員只需要定義需要的類以及類與類之間的依賴關(guān)系好渠,接下來當(dāng)應(yīng)用啟動后假栓,首先加載應(yīng)用上下文也就是公司會先派來一名秘書即Spring容器,然后秘書負(fù)責(zé)創(chuàng)建即招聘來領(lǐng)導(dǎo)需要的每個員工(bean初始化)以及協(xié)調(diào)員工之間的合作拦坠。所以要想實現(xiàn)依賴逐日的功能,就離不開容器,容器是Spring框架實現(xiàn)功能的核心,但是容器的實現(xiàn)有很多中方式链蕊,不唯一,常用的就是應(yīng)用上下文

當(dāng)員工需要其他員工(Abean中注入beanB-bean的裝配)的時候忱嘹,秘書去按照領(lǐng)要求招聘來的所有員工中尋找有沒有這種符合條件的員工,當(dāng)有的時候直接將這個其他員工指派給前者橱脸,員工是不用關(guān)心他需要的其他員工如何被指派過來础米,這個過程就是裝配bean的過程。開發(fā)人員(即領(lǐng)導(dǎo))負(fù)責(zé)規(guī)劃添诉,即在程序中定義要招聘具備哪些素質(zhì)的員工屁桑,以及他們之間如何協(xié)作(即告訴Spring bean之間的依賴關(guān)系),秘書(Spring容器)負(fù)責(zé)執(zhí)行領(lǐng)導(dǎo)的命令栏赴,即按需求照招聘員工蘑斧,將員工B指派給員工A。若公司里不存在符合條件的員工B就會拋出異常,秘書表示解決不了竖瘾,需要領(lǐng)導(dǎo)上手修改代碼解決問題沟突;或者當(dāng)有多個滿足條件的員工B時,也會拋出異常捕传,秘書表示解決不了惠拭,需要領(lǐng)導(dǎo)修改代碼直到秘書可以唯一確定一個員工B。所有員工會一直被秘書代為管理庸论,直到秘書被撤職职辅;

而對于AOP,可以類比為公司的職能部門聂示,如人力資源域携,法律、后勤等鱼喉,公司給每個員工都需要發(fā)工資涵亏,這不是員工應(yīng)該關(guān)心的工作方面的問題,所以公司將這個交給職能部門去解決蒲凶,領(lǐng)導(dǎo)只要安排好工作气筋,當(dāng)?shù)焦窘Y(jié)算日期(切點),人力資源專員(切面旋圆,即POJO)就會開始結(jié)算需要結(jié)算工資的員工的工資并將工資發(fā)放給員工(結(jié)算和發(fā)放行為就是通知)宠默;

Spring還能通過使用模板消除重復(fù)的樣式代碼,比如集成持久化框架灵巧,這個可以類比為公司的一些審批流程化搀矫,例如員工請假,員工請假本來是需要首先填寫假條刻肄,然后逐次找各級領(lǐng)導(dǎo)審批瓤球,審批完成之后在提交給相關(guān)部門進(jìn)行備份入庫等,其中有一步有問題整個流程都會問題敏弃,這樣太麻煩了卦羡,所以公司將其流程化,員工只需要填寫申請單麦到,其他的重復(fù)流程(如后面的審批提交入庫等)交給公司去做绿饵,員工只需要等待結(jié)果(類比為只需要在代碼中實現(xiàn)必須的邏輯,其他后續(xù)的工作都交給Spring來做)瓶颠,這個過程就消除了重復(fù)的樣板代碼拟赊。

②以下是Spring實戰(zhàn)原文講述的Spring容器中的bean生命周期:


詳細(xì)描述為:

1、Spring對bean進(jìn)行實例化(即創(chuàng)建對象粹淋,對屬性賦值吸祟,初始化方法等)瑟慈;

2、Spring將值和bean的引用注入到bean對應(yīng)的屬性中(bean的裝配)屋匕;

3封豪、如果bean實現(xiàn)了BeanNameAware接口,Spring則將bean的ID傳遞給setBeanName()方法(可類比為給員工一個員工ID)炒瘟;

4吹埠、如果bean實現(xiàn)了BeanFactoryAware接口,Spring將調(diào)用setBeanFactory()方法疮装,將BeanFactory容器實例傳入(現(xiàn)在常用的就是應(yīng)用上下文容器缘琅,Spring初始化容器來管理開發(fā)人員創(chuàng)建的bean);

5廓推、如果bean實現(xiàn)了ApplicationContextAware接口刷袍,Spring將調(diào)用setApplicationContext()方法,將bean所在的應(yīng)用上下文的引用(即應(yīng)用上下文實例)傳入進(jìn)來樊展;

6呻纹、如果bean實現(xiàn)了BeanPostProcessor接口,Spring將調(diào)用他們的postProcessBeforeInitialization()方法(這個目前還不知道是為了干什么)专缠;

7雷酪、如果bean實現(xiàn)了InitializingBean接口,Spring將調(diào)用他們的afterPropertiesSet()方法涝婉,類似的哥力,如果bean使用init-method聲明了初始化方法,該方法也會被調(diào)用墩弯;

8吩跋、如果bean實現(xiàn)了BeanPostProcessor接口,Spring將調(diào)用他們的postProcessAfterInitialization()方法(這個目前還不知道是為了干什么)渔工;

9锌钮、此時bean已經(jīng)準(zhǔn)備就緒,可以被應(yīng)用程序使用了引矩,他們將一直駐留在應(yīng)用上下文中梁丘,直到該應(yīng)用上下文被銷毀;

10脓魏、如果bean實現(xiàn)了DisposableBean接口兰吟,Spring將調(diào)用他的destroy()接口方法通惫。同樣地茂翔,如果bean使用destroy-method聲明了銷毀方法,該方法也會被調(diào)用履腋。

③Spring模塊


Spring發(fā)布版本中包含了很多不同的模塊珊燎,按照功能劃分為6類

就總體而言悔政,這些模塊為企業(yè)級開發(fā)應(yīng)用提供了所需的一切,但是你自己的應(yīng)用是不用引入所有的模塊槽地,只需要根據(jù)自身的需求引入對應(yīng)的功能捌蚊,加入Spring不能滿足需求時近弟,你可以集成第三方框架和類庫祷愉,來實現(xiàn)你要實現(xiàn)的功能。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赴涵,一起剝皮案震驚了整個濱河市句占,隨后出現(xiàn)的幾起案子躯嫉,更是在濱河造成了極大的恐慌,老刑警劉巖擂啥,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帆阳,死亡現(xiàn)場離奇詭異,居然都是意外死亡山宾,警方通過查閱死者的電腦和手機鳍徽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門阶祭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來直秆,“玉大人圾结,你說我怎么就攤上這事筝野≡辆纾” “怎么了俊扳?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵馋记,是天一觀的道長梯醒。 經(jīng)常有香客問我,道長畜隶,這世上最難降的妖魔是什么号胚? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任籽慢,我火速辦了婚禮猫胁,結(jié)果婚禮上箱亿,老公的妹妹穿的比我還像新娘弃秆。我一直安慰自己届惋,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布脑豹。 她就那樣靜靜地躺著,像睡著了一般衡查。 火紅的嫁衣襯著肌膚如雪瘩欺。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天击碗,我揣著相機與錄音们拙,去河邊找鬼。 笑死械拍,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的埂奈。 我是一名探鬼主播迄损,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼垮抗!你這毒婦竟也來了氏捞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤冒版,失蹤者是張志新(化名)和其女友劉穎液茎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辞嗡,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡捆等,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了续室。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片楚里。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖猎贴,靈堂內(nèi)的尸體忽然破棺而出班缎,到底是詐尸還是另有隱情,我是刑警寧澤她渴,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布达址,位于F島的核電站,受9級特大地震影響趁耗,放射性物質(zhì)發(fā)生泄漏沉唠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一苛败、第九天 我趴在偏房一處隱蔽的房頂上張望满葛。 院中可真熱鬧径簿,春花似錦、人聲如沸嘀韧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锄贷。三九已至译蒂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谊却,已是汗流浹背柔昼。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留炎辨,地道東北人捕透。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像碴萧,于是被迫代替她去往敵國和親乙嘀。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理勿决,服務(wù)發(fā)現(xiàn)乒躺,斷路器,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,815評論 6 342
  • 1.1 spring IoC容器和beans的簡介 Spring 框架的最核心基礎(chǔ)的功能是IoC(控制反轉(zhuǎn))容器低缩,...
    simoscode閱讀 6,717評論 2 22
  • 今天是星期一嘉冒,學(xué)校升國旗,女兒要提前到校咆繁。到點了讳推,我去女兒房間一看,女兒還賴在床上不起來玩般,在我的再三催促下...
    賈皓淇媽媽閱讀 142評論 0 0
  • 1 我怕蛇坏为,非常怕究驴。 所有蛇的圖片,具象或抽象的我都怕匀伏,更別提實物了洒忧。 事實上,我小時候并不怕蛇够颠,家里真正怕蛇的人...
    東籬澄子閱讀 453評論 0 2