三 Spring-依賴注入概要(IOC)

目錄

1. Web MVC發(fā)展史歷程
2.Spring概要
3.Spring-依賴注入概要(IOC)
4.屬性注入的三種實現(xiàn)方式
5.Spring-IoC XML裝配
6.Spring-XML設(shè)置Bean的值
7.Spring-IoC 注解(1)
8.Spring-IoC 注解(2)
9.Spring-AOP切面編程(1)
10.Spring-AOP切面編程(2)
未完待續(xù)...

一、產(chǎn)生的原因

在采用面向?qū)ο蠓椒ㄔO(shè)計的軟件系統(tǒng)中悔据,底層實現(xiàn)都是由N個對象組成的,所有的對象通過彼此的合作埠偿,最終實現(xiàn)系統(tǒng)的業(yè)務(wù)邏輯。即軟件系統(tǒng)中對象之間的耦合,對象A和對象B之間有關(guān)聯(lián),對象B又和對象C有依賴關(guān)系鹊汛,這樣對象和對象之間有著復(fù)雜的依賴關(guān)系菇爪,所以才有了控制反轉(zhuǎn)這個理論

二、什么是控制反轉(zhuǎn)和依賴注入

1柒昏、什么是控制反轉(zhuǎn)?

  1. IoC是Inversion of Control的縮寫,有的翻譯成“控制反轉(zhuǎn)”熙揍,還有翻譯成為“控制反向”或者“控制倒置”
  2. 1996年职祷,Michael Mattson在一篇有關(guān)探討面向?qū)ο罂蚣艿奈恼轮校紫忍岢隽薎oC 這個概念届囚。簡單來說就是把復(fù)雜系統(tǒng)分解成相互合作的對象有梆,這些對象類通過封裝以后,內(nèi)部實現(xiàn)對外部是透明的意系,從而降低了解決問題的復(fù)雜度泥耀,而且可以靈活地被重用和擴(kuò)展。IoC理論提出的觀點大體是這樣的:借助于“第三方”實現(xiàn)具有依賴關(guān)系的對象之間的解耦
  3. 所謂控制反轉(zhuǎn)就是應(yīng)用本身不負(fù)責(zé)依賴對象的創(chuàng)建及維護(hù)蛔添,依賴對象的創(chuàng)建及維護(hù)是由外部容器負(fù)責(zé)的痰催。 這樣控制權(quán)就由應(yīng)用轉(zhuǎn)移到了外部容器,控制權(quán)的轉(zhuǎn)移就是所謂反轉(zhuǎn)

2迎瞧、什么是依賴注入(DI)?

1夸溶、概念

  1. IoC的別名,2004年,Martin Fowler探討了同一個問題凶硅,既然IoC是控制反轉(zhuǎn)缝裁,那么到底是“哪些方面的控制被反轉(zhuǎn)了呢?”足绅,經(jīng)過詳細(xì)地分析和論證后捷绑,他得出了答案:“獲得依賴對象的過程被反轉(zhuǎn)了”∏饴瑁控制被反轉(zhuǎn)之后粹污,獲得依賴對象的過程由自身管理對象變?yōu)橛蒊oC容器主動注入。于是允懂,他給“控制反轉(zhuǎn)”取了一個更合適的名字叫做“依賴注入(Dependency Injection厕怜,DI)”。他的這個答案蕾总,實際上給出了實現(xiàn)IoC的方法:注入粥航。
  2. 所謂依賴注入,就是由IoC容器在運行期間生百,動態(tài)地將某種依賴關(guān)系注入到對象之中递雀。
  3. 所以,依賴注入(DI)和控制反轉(zhuǎn)(IoC)是從不同的角度描述的同一件事情蚀浆,就是指通過引入IoC容器缀程,利用依賴關(guān)系注入的方式搜吧,實現(xiàn)對象之間的解耦

2、依賴關(guān)系的四種情況

  1. 對象之間最弱的一種關(guān)聯(lián)方式杨凑,是臨時性的關(guān)聯(lián)滤奈。代碼中一般指由局部變量、函數(shù)參數(shù)撩满、返回值建立的對于其他對象的調(diào)用關(guān)系
  2. 四種情況
    • ClassA中某個方法的參數(shù)類型是ClassB蜒程; 這種情況成為耦合;
    • ClassA中某個方法的參數(shù)類型是ClassB的一個屬性伺帘; 這種情況成為緊耦合昭躺;
    • ClassA中某個方法的實現(xiàn)實例化ClassB;
    • ClassA中某個方法的返回值的類型是ClassB伪嫁;
  3. 如果出現(xiàn)了上述四種情況之一领炫,兩個類很有可能就是“依賴”關(guān)系。 依賴關(guān)系(Dependency):是類與類之間的連接张咳,依賴總是單向的帝洪。依賴關(guān)系代表一個類依賴于另一個類的定義

3、總結(jié)

(Dependency Injection)和控制反轉(zhuǎn)(Inversion of Control)是同一個概念脚猾。具體含義是:當(dāng)某個角色(可能是一個Java實例碟狞,調(diào)用者)需要另一個角色(另一個Java實例,被調(diào)用者)的協(xié)助時婚陪,在 傳統(tǒng)的程序設(shè)計過程中族沃,通常由調(diào)用者來創(chuàng)建被調(diào)用者的實例。但在Spring里泌参,創(chuàng)建被調(diào)用者的工作不再由調(diào)用者來完成脆淹,因此稱為控制反轉(zhuǎn);創(chuàng)建被調(diào)用者 實例的工作通常由Spring容器來完成,然后注入調(diào)用者沽一,因此也稱為依賴注入

三盖溺、使用IoC的好處

  1. 可維護(hù)性比較好,非常便于進(jìn)行單元測試铣缠,便于調(diào)試程序和診斷故障烘嘱。代碼中的每一個Class都可以單獨測試,彼此之間互不影響蝗蛙,只要保證自身的功能無誤即可蝇庭,這就是組件之間低耦合或者無耦合帶來的好處。
  2. 每個開發(fā)團(tuán)隊的成員都只需要關(guān)注自己要實現(xiàn)的業(yè)務(wù)邏輯捡硅,完全不用去關(guān)心其他人的工作進(jìn)展哮内,因為你的任務(wù)跟別人沒有任何關(guān)系,你的任務(wù)可以單獨測試壮韭,你的任務(wù)也不用依賴于別人的組件北发,再也不用扯不清責(zé)任了纹因。所以,在一個大中型項目中琳拨,團(tuán)隊成員分工明確瞭恰、責(zé)任明晰,很容易將一個大的任務(wù)劃分為細(xì)小的任務(wù)狱庇,開發(fā)效率和產(chǎn)品質(zhì)量必將得到大幅度的提高寄疏。
  3. 可復(fù)用性好,我們可以把具有普遍性的常用組件獨立出來僵井,反復(fù)應(yīng)用到項目中的其它部分,或者是其它項目驳棱,當(dāng)然這也是面向?qū)ο蟮幕咎卣髋病o@然,IoC更好地貫徹了這個原則社搅,提高了模塊的可復(fù)用性驻债。符合接口標(biāo)準(zhǔn)的實現(xiàn),都可以插接到支持此標(biāo)準(zhǔn)的模塊中形葬。
  4. IoC生成對象的方式轉(zhuǎn)為外置方式合呐,也就是把對象生成放在配置文件里進(jìn)行定義,這樣笙以,當(dāng)我們更換一個實現(xiàn)子類將會變得很簡單淌实,只要修改配置文件就可以了,完全具有熱插撥的特性

四猖腕、IoC的原理

控制反轉(zhuǎn)是Spring框架的核心拆祈。其原理是基于面向?qū)ο?OO)設(shè)計原則的The Hollywood Principle:Don't call us, we'll call you(別找我,我會來找你的)倘感。也就是說放坏,所有的組件都是被動的,所有的組件初始化和調(diào)用都由容器負(fù)責(zé)老玛。組件處在一個容器當(dāng)中淤年,由容器負(fù)責(zé)管理。簡單的來講蜡豹,就是由容器控制程序之間的關(guān)系麸粮,而非傳統(tǒng)實現(xiàn)中,由程序代碼直接操控镜廉,即在一個類中調(diào)用另外一個類豹休。這也就是所謂“控制反轉(zhuǎn)”的概念所在:控制權(quán)由應(yīng)用代碼中轉(zhuǎn)到了外部容器,控制權(quán)的轉(zhuǎn)移桨吊,即所謂反

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末威根,一起剝皮案震驚了整個濱河市凤巨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌洛搀,老刑警劉巖敢茁,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異留美,居然都是意外死亡彰檬,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門谎砾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逢倍,“玉大人,你說我怎么就攤上這事景图〗系瘢” “怎么了?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵挚币,是天一觀的道長亮蒋。 經(jīng)常有香客問我,道長妆毕,這世上最難降的妖魔是什么慎玖? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮笛粘,結(jié)果婚禮上趁怔,老公的妹妹穿的比我還像新娘。我一直安慰自己薪前,他們只是感情好痕钢,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著序六,像睡著了一般任连。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上例诀,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天随抠,我揣著相機(jī)與錄音,去河邊找鬼繁涂。 笑死拱她,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扔罪。 我是一名探鬼主播秉沼,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了唬复?” 一聲冷哼從身側(cè)響起矗积,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎敞咧,沒想到半個月后棘捣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡休建,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年乍恐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片测砂。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡茵烈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出砌些,到底是詐尸還是另有隱情呜投,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布寄症,位于F島的核電站,受9級特大地震影響矩动,放射性物質(zhì)發(fā)生泄漏有巧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一悲没、第九天 我趴在偏房一處隱蔽的房頂上張望篮迎。 院中可真熱鬧,春花似錦示姿、人聲如沸甜橱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽岂傲。三九已至,卻和暖如春子檀,著一層夾襖步出監(jiān)牢的瞬間镊掖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工褂痰, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留亩进,地道東北人。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓缩歪,卻偏偏與公主長得像归薛,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

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