Spring FrameWork 總結 依賴

2021-08-26 10:45:49 字數 2179 閱讀 1894

package x.y;

public class foo

}

beanfactory對於它所管理的bean提供兩種注入依賴方式(實際上它也支援同時使用構造器注入和setter方式注入依賴)。需要注入的依賴將儲存在beandefinition中,它能根據指定的propertyeditor實現將屬性從一種格式轉換成另外一種格式。然而,大部份的spring使用者並不需要直接以程式設計的方式處理這些類,而是採用xml的方式來進行定義,在內部這些定義將被轉換成相應類的例項,並最終得到乙個spring ioc容器例項。

處理bean依賴關係通常按以下步驟進行:每個bean的依賴將以屬性、構造器引數、或靜態工廠方法引數的形式出現。當這些bean被實際建立時

,這些依賴也將會提供給該bean。

每個屬性或構造器引數既可以是乙個實際的值,也可以是對該容器中另乙個bean的引用。

每個指定的屬性或構造器引數值必須能夠被轉換成特定的格式或構造引數所需的型別。預設情況下,spring會以string型別提供值轉換成各種內建型別,比如intlongstringboolean等。

spring會在容器被建立時驗證容器中每個bean的配置,包括驗證那些bean所引用的屬性是否指向乙個有效的bean(即被引用的bean也在容器中被定義)。然而,在bean被實際建立

迴圈依賴的定義:

在採用構造器注入的方式配置bean時,很有可能會產生迴圈依賴的情況。

比如說,乙個類a,需要通過構造器注入類b,而類b又需要通過構造器注入類a。如果為類a和b配置的bean被互相注入的話,那麼spring ioc容器將檢測出迴圈引用,並丟擲beancurrentlyincreationexception異常。

對於此問題,乙個可能的解決方法就是修改源**,將某些構造器注入改為setter注入。另乙個解決方法就是完全放棄構造器注入,只使用setter注入。換句話說,除了極少數例外,大部分的迴圈依賴都是可以避免的,不過採用setter注入產生迴圈依賴的可能性也是存在的。

與通常我們見到的非迴圈依賴的情況有所不同,在兩個bean之間的迴圈依賴將導致乙個bean在被完全初始化的時候被注入到另乙個bean中(如同我們常說的先有蛋還是先有雞的情況)。

idref元素用來將容器內其它bean的id

傳給元素,同時提供錯誤驗證功能。

上述bean定義片段完全地

等同於(在執行時)以下的片段:

第一種形式比第二種更可取的主要原因是,使用idref標記允許容器在部署時

驗證所被引用的bean是否存在。而第二種方式中,傳給clientbean的targetname屬性值並沒有被驗證。任何的輸入錯誤僅在clientbean實際例項化時才會被發現(可能伴隨著致命的錯誤)。如果clientbean 是prototype型別的bean,則此輸入錯誤(及由此導致的異常)可能在容器部署很久以後才會被發現。

此外,如果被引用的bean在同一xml檔案內,且bean名字就是bean id

,那麼可以使用local屬性,此屬性允許xml解析器在解析xml檔案時對引用的bean進行驗證。

構造器注入還是setter注入?由於大量的構造器引數可能使程式變得笨拙,特別是當某些屬性是可選的時候。因此通常情況下,spring開發團隊提倡使用setter注入。而且setter di在以後的某個時候還可將例項重新配置(或重新注入)(jmx mbean就是乙個很好的例子)。

儘管如此,構造器注入還是得到很多純化論者(也有很好的理由)的青睞。一次性將所有依賴注入的做法意味著,在未完全初始化的狀態下,此物件不會返回給客戶**(或被呼叫),此外物件也不需要再次被重新配置(或重新注入)。

對於注入型別的選擇並沒硬性的規定。只要能適合你的應用,無論使用何種型別的di都可以。對於那些沒有源**的第三方類,或者沒有提供setter方法的遺留**,我們則別無選擇--構造器注入將是你唯一的選擇。

Spring FrameWork 學習總結

spring framework主要包含以下內容 1.ioc 和 di ioc容器功能 例項化 初始化元件 裝配元件依賴關係 負責元件生命周管理 ioc inversion of control 是乙個重要的物件導向程式設計的法則來削減電腦程式的耦合問題,也是輕量級spring框架核心。di dep...

用Spring framework實現定時器功能

採用web自動載入timermanager來治理timer鏈,在class更新伺服器熱載入後會發生異常。這要求對timermanager進行一些非凡的處理才能保證timer鏈的正確性。使用spring framework中提供的timertask自動載入功能可以非常輕易的實現定時器鏈的治理。同時,採...

Spring Framework標記庫初學指南

上面是關於乙個新的framework的簡單介紹,據說是未來j2ee發展的方向。以前在論壇上有關於j2ee最佳組合的討論,聽說這個jstl struts 或webwork spring hibernate的組合很被看好,如果你感興趣的話,可以到springframework中文論壇上看看。下面轉入本文...