天天看點

spring 依賴注入

Technorati 标記: spring,依賴注入,DI,ioc

    平常的java開發中,程式員在某個類中需要依賴其它類的方法,則通常是new一個依賴類再調用類執行個體的方法,這種開發存在的問題是new的類執行個體不好統一管理,spring提出了依賴注入的思想,即依賴類不由程式員執行個體化,而是通過spring容器幫我們new指定執行個體并且将執行個體注入到需要該對象的類中。依賴注入的另一種說法是“控制反轉”,通俗的了解是:平常我們new一個執行個體,這個執行個體的控制權是我們程式員,而控制反轉是指new執行個體工作不由我們程式員來做而是交給spring容器來做。

    依賴注入主要有兩種方式:構造器注入與set注入。

    構造器注入就是指指帶有參數的構造函數注入,如下:

    現在來考慮一下由構造參數引來的問題,如果構造參數也是ioc容器裡一個bean,那比較好辦,如下:

    以上構造函數并不存在模糊的地方,可以直接在xml配置檔案使用<constructor-arg />來聲明,而不需要聲明參數的索引或者類型:

    如果是使用索引 ref,其類型是可以推斷出來的。可是如果使用的是基本的資料類型或者string,如47,那spring是無法判斷得出”47“是什麼類型,如下:

    同樣能夠想到的是根據參數的索引來指派,如下:

     另外,還有第三種方式,就是根據參數名來指定指派,如下:

    set注入,其實就是不通過構造器來注入,而是通過set方法來注入。其使用與構造器注入類似,如下:

三、依賴注入的Example

    1、如下是一個基于set注入的Demo,

    其對應的xml配置檔案如下:

    依然值得提醒的是,set注入使用property來注入依賴對象.現在我們來對比一下與構造器注入的差別:

    現在來看一下構造器注入 的xml配置檔案檔案:

    值得提醒的是,構造器注入使用constructor-arg 來注入依賴對象.盡管構造器注入好set注入是最為常用的兩種方法,我們也依然需要了解一下其他的方法,靜态工廠注入和執行個體工廠注入,這兩種方法的使用比較類似,現在隻談一下靜态工廠的注入,如下:

    同時看一下其xml配置檔案,注意的是靜态工廠注入也是使用constructor-arg 來注入依賴對象,如下:

繼續閱讀