Spring之IOC容器

IoC與DI

首先想說說IoC(Inversion of Control,控制倒轉(zhuǎn))喜鼓。

這是spring的核心际乘,貫穿始終坡倔。所謂IoC,對(duì)于spring框架來說,就是由spring來負(fù)責(zé)控制對(duì)象的生命周期和對(duì)象間的關(guān)系罪塔。

舉個(gè)例子投蝉,我們是如何找女朋友的?常見的情況是征堪,我們到處去看哪里有長(zhǎng)得漂亮身材又好的mm瘩缆,然后打聽她們的興趣愛好、qq號(hào)佃蚜、電話號(hào)…庸娱,想辦法認(rèn)識(shí)她們,投其所好送其所好谐算,然后嘿嘿…這個(gè)過程是復(fù)雜深?yuàn)W的熟尉,我們必須自己設(shè)計(jì)和面對(duì)每個(gè)環(huán)節(jié)。

傳統(tǒng)的程序開發(fā)也是如此洲脂,在一個(gè)對(duì)象中斤儿,如果要使用另外的對(duì)象,就必須得到它(自己new一個(gè)恐锦,或者從JNDI中查詢一個(gè))往果,使用完之后還要將對(duì)象銷毀(比如Connection等),對(duì)象始終會(huì)和其他的接口或類藕合起來一铅。

那么IoC是如何做的呢陕贮?

有點(diǎn)像通過婚介找女朋友,在我和女朋友之間引入了一個(gè)第三者:婚姻介紹所馅闽。

婚介管理了很多男男女女的資料飘蚯,我可以向婚介提出一個(gè)列表,告訴它我想找個(gè)什么樣的女朋友福也,比如長(zhǎng)得像李嘉欣局骤,身材像林熙雷,技術(shù)像齊達(dá)內(nèi)之類的暴凑,然后婚介就會(huì)按照我們的要求峦甩,提供一個(gè)mm,我們只需要去和她談戀愛现喳、結(jié)婚就行了凯傲。

簡(jiǎn)單明了,如果婚介給我們的人選不符合要求嗦篱,我們就會(huì)拋出異常冰单。整個(gè)過程不再由我自己控制,而是有婚介這樣一個(gè)類似容器的機(jī)構(gòu)來控制灸促。

Spring所倡導(dǎo)的開發(fā)方式就是如此:

所有的類都會(huì)在spring容器中登記诫欠,告訴spring你是個(gè)什么東西涵卵,你需要什么東西,然后spring會(huì)在系統(tǒng)運(yùn)行到適當(dāng)?shù)臅r(shí)候荒叼,把你要的東西主動(dòng)給你轿偎,同時(shí)也把你交給其他需要你的東西。

所有的類的創(chuàng)建被廓、銷毀都由 spring來控制坏晦,也就是說控制對(duì)象生存周期的不再是引用它的對(duì)象,而是spring嫁乘。對(duì)于某個(gè)具體的對(duì)象而言昆婿,以前是它控制其他對(duì)象,現(xiàn)在是所有對(duì)象都被spring控制亦渗,所以這叫控制反轉(zhuǎn)挖诸。

IoC的一個(gè)重點(diǎn)是在系統(tǒng)運(yùn)行中,動(dòng)態(tài)的向某個(gè)對(duì)象提供它所需要的其他對(duì)象法精。

這一點(diǎn)是通過DI(Dependency Injection多律,依賴注入)來實(shí)現(xiàn)的。

比如對(duì)象A需要操作數(shù)據(jù)庫搂蜓,以前我們總是要在A中自己編寫代碼來獲得一個(gè)Connection對(duì)象狼荞,有了 spring我們就只需要告訴spring,A中需要一個(gè)Connection帮碰,至于這個(gè)Connection怎么構(gòu)造相味,何時(shí)構(gòu)造,A不需要知道殉挽。

在系統(tǒng)運(yùn)行時(shí)丰涉,spring會(huì)在適當(dāng)?shù)臅r(shí)候制造一個(gè)Connection,然后像打針一樣斯碌,注射到A當(dāng)中一死,這樣就完成了對(duì)各個(gè)對(duì)象之間關(guān)系的控制。A需要依賴 Connection才能正常運(yùn)行傻唾,而這個(gè)Connection是由spring注入到A中的投慈,依賴注入的名字就這么來的

那么DI是如何實(shí)現(xiàn)的呢冠骄? Java 1.3之后一個(gè)重要特征是反射(reflection)伪煤,它允許程序在運(yùn)行的時(shí)候動(dòng)態(tài)的生成對(duì)象、執(zhí)行對(duì)象的方法凛辣、改變對(duì)象的屬性抱既,spring就是通過反射來實(shí)現(xiàn)注入的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扁誓,一起剝皮案震驚了整個(gè)濱河市蝙砌,隨后出現(xiàn)的幾起案子阳堕,更是在濱河造成了極大的恐慌跋理,老刑警劉巖择克,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異前普,居然都是意外死亡肚邢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門拭卿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骡湖,“玉大人,你說我怎么就攤上這事峻厚∠煸蹋” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵惠桃,是天一觀的道長(zhǎng)浦夷。 經(jīng)常有香客問我,道長(zhǎng)辜王,這世上最難降的妖魔是什么劈狐? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮呐馆,結(jié)果婚禮上肥缔,老公的妹妹穿的比我還像新娘。我一直安慰自己汹来,他們只是感情好续膳,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著收班,像睡著了一般坟岔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闺阱,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天炮车,我揣著相機(jī)與錄音,去河邊找鬼酣溃。 笑死瘦穆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的赊豌。 我是一名探鬼主播扛或,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼碘饼!你這毒婦竟也來了熙兔?” 一聲冷哼從身側(cè)響起悲伶,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎住涉,沒想到半個(gè)月后麸锉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡舆声,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年花沉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片媳握。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡碱屁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蛾找,到底是詐尸還是另有隱情娩脾,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布打毛,位于F島的核電站柿赊,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏隘冲。R本人自食惡果不足惜闹瞧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望展辞。 院中可真熱鬧奥邮,春花似錦、人聲如沸罗珍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽覆旱。三九已至蘸朋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間扣唱,已是汗流浹背藕坯。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留噪沙,地道東北人炼彪。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像正歼,于是被迫代替她去往敵國和親辐马。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理局义,服務(wù)發(fā)現(xiàn)喜爷,斷路器冗疮,智...
    卡卡羅2017閱讀 134,701評(píng)論 18 139
  • 1.1 spring IoC容器和beans的簡(jiǎn)介 Spring 框架的最核心基礎(chǔ)的功能是IoC(控制反轉(zhuǎn))容器,...
    simoscode閱讀 6,721評(píng)論 2 22
  • 1.1.1 Spring 框架 Spring 框架是一個(gè)分層架構(gòu)檩帐,由 7 個(gè)定義良好的模塊組成术幔。它的成功來源于理念...
    程序員成長(zhǎng)記閱讀 702評(píng)論 0 0
  • 主要參照了http://www.cnblogs.com/xiaoxi/p/5930736.html、http://...
    hklbird閱讀 493評(píng)論 0 1
  • (作于武大賞櫻花時(shí)節(jié)) 彼賞櫻花吾賞人轿塔,眾里尋她夢(mèng)牽魂特愿。 夢(mèng)里不知身是客,漫步攜游已忘真勾缭。
    一只學(xué)術(shù)小狐貍閱讀 277評(píng)論 0 3