<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    人在江湖

      BlogJava :: 首頁(yè) :: 聯(lián)系 :: 聚合  :: 管理
      82 Posts :: 10 Stories :: 169 Comments :: 0 Trackbacks

    轉(zhuǎn)自:http://blog.csdn.net/ycyheartfly/archive/2007/02/25/1514190.aspx

    Spring種提供了2種常用的注入方式,set方法注入和構(gòu)造函數(shù)注入。由于這2種注入方式很相似,都可以滿(mǎn)足我們的需求,所以在大多數(shù)情況下我們忽視了這2種注入方式的區(qū)別。下面讓我們看看這2種注入方式的特點(diǎn)。
    我們先看看Spring在使用set方法注入時(shí),是怎樣實(shí)例化一個(gè)Bean和Bean的合作者的:

    在A(yíng)中有一個(gè)setB方法用來(lái)接收B對(duì)象的實(shí)例。那么Spring實(shí)例化A對(duì)象的過(guò)程如下:

    在不考慮Bean的初始化方法和一些Spring回調(diào)的情況下,Spring首先去調(diào)用A對(duì)象的構(gòu)造函數(shù)實(shí)例化A,然后查找A依賴(lài)的對(duì)象本例子中是B(合作者)。一但找到合作者,Spring就會(huì)調(diào)用合作者(B)的構(gòu)造函數(shù)實(shí)例化B。如果B還有依賴(lài)的對(duì)象Spring會(huì)把B上依賴(lài)的所有對(duì)象都按照相同的機(jī)制實(shí)例化然后調(diào)用A對(duì)象的setB(B b)把b對(duì)象注入給A。
    因?yàn)镾pring調(diào)用一個(gè)對(duì)象的set方法注入前,這個(gè)對(duì)象必須先被實(shí)例化。所以在"使用set方法注入"的情況下Spring會(huì)首先調(diào)用對(duì)象的構(gòu)造函數(shù)。
    我們?cè)趤?lái)看通過(guò)構(gòu)造函數(shù)注入的過(guò)程:

    如果發(fā)現(xiàn)配置了對(duì)象的構(gòu)造注入,那么Spring會(huì)在調(diào)用構(gòu)造函數(shù)前把構(gòu)造函數(shù)需要的依賴(lài)對(duì)象都實(shí)例化好,然后再把這些實(shí)例化后的對(duì)象作為參數(shù)去調(diào)用構(gòu)造函數(shù)。
    在使用構(gòu)造函數(shù)和set方法依賴(lài)注入時(shí),Spring處理對(duì)象和對(duì)象依賴(lài)的對(duì)象的順序時(shí)不一樣的。一般把一個(gè)Bean設(shè)計(jì)為構(gòu)造函數(shù)接收依賴(lài)對(duì)象時(shí),其實(shí)是表達(dá)了這樣一種關(guān)系:他們(依賴(lài)對(duì)象)不存在時(shí)我也不存在,即“沒(méi)有他們就沒(méi)有我”。
    通過(guò)構(gòu)造函數(shù)的注入方式其實(shí)表達(dá)了2個(gè)對(duì)象間的一種強(qiáng)的聚合關(guān)系:組合關(guān)系。就比如一輛車(chē)如果沒(méi)有輪子、引擎等部件那么車(chē)也就不存在了。而且車(chē)是由若干重要部件組成的,在這些部件沒(méi)有的情況下車(chē)也不可能存在。這里車(chē)和他的重要部件就時(shí)組合的關(guān)系。如果你的應(yīng)用中有這樣類(lèi)似的場(chǎng)景那么你應(yīng)該使用“構(gòu)造函數(shù)注入”的方式管理他們的關(guān)系。“構(gòu)造函數(shù)注入”可以保證合作者先創(chuàng)建,在后在創(chuàng)建自己。
    通過(guò)set方法注入的方式表達(dá)了2個(gè)對(duì)象間較弱的依賴(lài)關(guān)系:聚合關(guān)系。就像一輛車(chē),如果沒(méi)有車(chē)內(nèi)音像車(chē)也時(shí)可以工作的。當(dāng)你不要求合作者于自己被創(chuàng)建時(shí),“set方法注入”注入比較合適。
    雖然在理論上“構(gòu)造函數(shù)注入”和“set方法注入”代表2種不同的依賴(lài)強(qiáng)度,但是在spring中,spring并不會(huì)把無(wú)效的合作者傳遞給一個(gè) bean。如果合作者無(wú)效或不存在spring會(huì)拋出異常,這樣spring保證一個(gè)對(duì)象的合作者都是可用的。所以在spring中,“構(gòu)造函數(shù)注入”和 “set方法注入”唯一的區(qū)別在于2種方式創(chuàng)建合作者的順序不同。
    使用構(gòu)造函數(shù)依賴(lài)注入時(shí),Spring保證所有一個(gè)對(duì)象所有依賴(lài)的對(duì)象先實(shí)例化后,才實(shí)例化這個(gè)對(duì)象。(沒(méi)有他們就沒(méi)有我原則)
    使用set方法依賴(lài)注入時(shí),Spring首先實(shí)例化對(duì)象,然后才實(shí)例化所有依賴(lài)的對(duì)象。

    posted on 2011-04-07 23:36 人在江湖 閱讀(1241) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): spring
    主站蜘蛛池模板: 亚洲中文久久精品无码| 亚洲伊人成无码综合网 | 亚洲国产综合精品中文第一| 热久久这里是精品6免费观看| 亚洲日韩激情无码一区| 久久嫩草影院免费看夜色| 亚洲国产精品尤物yw在线| 一区二区免费国产在线观看| 国产美女无遮挡免费视频| 亚洲jizzjizz少妇| 国产又黄又爽又刺激的免费网址| 无码天堂亚洲国产AV| 亚洲欧洲中文日韩久久AV乱码| xxxx日本在线播放免费不卡| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 亚洲精品美女久久777777| 久久免费视频观看| 亚洲视频一区在线观看| 99re热免费精品视频观看| 国产亚洲美女精品久久| 中文字幕在线亚洲精品| 一级毛片免费观看不卡视频| 亚洲午夜精品一区二区公牛电影院| 成年女人毛片免费播放人| 国产精品亚洲综合网站| 曰韩亚洲av人人夜夜澡人人爽| 一级毛片不卡片免费观看| 午夜在线a亚洲v天堂网2019| 国产一级大片免费看| 你好老叔电影观看免费| 亚洲国产精品综合久久2007| 四虎影视永久免费观看地址| 最近免费中文字幕中文高清| 亚洲国产午夜电影在线入口| 免费大片黄手机在线观看| 久久免费精品视频| 久久精品国产亚洲AV天海翼| 亚洲国产精品一区第二页| 国产精品视频永久免费播放| 国产免费播放一区二区| 亚洲精品在线不卡|