天天看點

Spring 依賴注入方式詳解

<b>閱讀目錄</b>

<a href="http://www.cnblogs.com/java-class/p/4727775.html#_label0">1.set注入</a>

<a href="http://www.cnblogs.com/java-class/p/4727775.html#_label1">2.構造器注入</a>

<a href="http://www.cnblogs.com/java-class/p/4727775.html#_label2">3.靜态工廠的方法注入</a>

<a href="http://www.cnblogs.com/java-class/p/4727775.html#_label3">4.執行個體工廠的方法注入</a>

<a href="http://www.cnblogs.com/java-class/p/4727775.html#_label4">5.總結</a>

   平常的java開發中,程式員在某個類中需要依賴其它類的方法,則通常是new一個依賴類再調用類執行個體的方法,這種開發存在的問題是new的類執行個體不好統一管理,

spring提出了依賴注入的思想,即依賴類不由程式員執行個體化,而是通過spring容器幫我們new指定執行個體并且将執行個體注入到需要該對象的類中。依賴注入的另一種說法是“控制反轉”,

通俗的了解是:平常我們new一個執行個體,這個執行個體的控制權是我們程式員,而控制反轉是指new執行個體工作不由我們程式員來做而是交給spring容器來做。

spring有多種依賴注入的形式,下面僅介紹spring通過xml進行ioc配置的方式:

    這是最簡單的注入方式,假設有一個springaction,類中需要執行個體化一個springdao對象,那麼就可以定義一個private的springdao成員變量,然後建立springdao的set方法(這是ioc的注入入口):

Spring 依賴注入方式詳解
Spring 依賴注入方式詳解

   随後編寫spring的xml檔案,&lt;bean&gt;中的name屬性是class屬性的一個别名,class屬性指類的全名,因為在springaction中有一個公共屬性springdao,是以要在&lt;bean&gt;标簽中建立一個&lt;property&gt;标簽指定springdao。&lt;property&gt;标簽中的name就是springaction類中的springdao屬性名,ref指下面&lt;bean name="springdao"...&gt;,這樣其實是spring将springdaoimpl對象執行個體化并且調用springaction的setspringdao方法将springdao注入:

     這種方式的注入是指帶有參數的構造函數注入,看下面的例子,我建立了兩個成員變量springdao和user,但是并未設定對象的set方法,是以就不能支援第一種注入方式,這裡的注入方式是在springaction的構造函數中注入,也就是說在建立springaction對象時要将springdao和user兩個參數值傳進來:

Spring 依賴注入方式詳解
Spring 依賴注入方式詳解

     在xml檔案中同樣不用&lt;property&gt;的形式,而是使用&lt;constructor-arg&gt;标簽,ref屬性同樣指向其它&lt;bean&gt;标簽的name屬性:

Spring 依賴注入方式詳解
Spring 依賴注入方式詳解

     解決構造方法參數的不确定性,你可能會遇到構造方法傳入的兩參數都是同類型的,為了厘清哪個該賦對應值,則需要進行一些小處理:

下面是設定index,就是參數位置:

     另一種是設定參數類型:

     靜态工廠顧名思義,就是通過調用靜态工廠的方法來擷取自己需要的對象,為了讓spring管理所有對象,我們不能直接通過"工程類.靜态方法()"來擷取對象,而是依然通過spring注入的形式擷取:

Spring 依賴注入方式詳解
Spring 依賴注入方式詳解

     同樣看關鍵類,這裡我需要注入一個factorydao對象,這裡看起來跟第一種注入一模一樣,但是看随後的xml會發現有很大差别:

Spring 依賴注入方式詳解
Spring 依賴注入方式詳解

     spring的ioc配置檔案,注意看&lt;bean name="staticfactorydao"&gt;指向的class并不是factorydao的實作類,而是指向靜态工廠daofactory,并且配置 factory-method="getstaticfactorydaoimpl"指定調用哪個工廠方法:

Spring 依賴注入方式詳解
Spring 依賴注入方式詳解

     執行個體工廠的意思是擷取對象執行個體的方法不是靜态的,是以你需要首先new工廠類,再調用普通的執行個體方法:

    那麼下面這個類沒什麼說的,跟前面也很相似,但是我們需要通過執行個體工廠類建立factorydao對象:

Spring 依賴注入方式詳解
Spring 依賴注入方式詳解

     最後看spring配置檔案:

Spring 依賴注入方式詳解
Spring 依賴注入方式詳解

     spring ioc注入方式用得最多的是(1)(2)種,多謝多練就會非常熟練。

另外注意:通過spring建立的對象預設是單例的,如果需要建立多執行個體對象可以在&lt;bean&gt;标簽後面添加一個屬性:

如果,您認為閱讀這篇部落格讓您有些收獲,不妨點選一下右下角的【推薦】 

如果,您希望更容易地發現我的新部落格,不妨點選一下左下角的【關注我】 

如果,您對我的部落格内容感興趣,請繼續關注我的後續部落格,我是【orson】 

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段 聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。 

轉載:http://www.cnblogs.com/java-class/p/4727775.html