深入理解Spring框架中的 依賴注入

2021-08-24 19:58:07 字數 2298 閱讀 1089

spring-framework

spring框架的核心概念就是「依賴注入」,什麼是依賴注入?其實理解起來很簡單,依賴注入其實就是框架用於連線各個應用程式的一項技術。

框架負責將你的應用程式中的各種相互依賴進行連線起來,並從應用程式**中完全解決掉連線邏輯和物件建立。

舉乙個描述收銀機的例子:

1.建立乙個介面用來描述收銀機

public inte***ce cashregister

2.建立乙個介面用來實現某商品**查詢

public inte***ce pricematrix

3.建立cashregister它的實現類.

public class cashregisterimpl implements cashregister

return total;

}}以上例項存在三個問題:

第乙個,每乙個「cashregisterimpl」的例項都會存在pricematriximpl例項,也就是說建立或維護pricematriximpl這個物件成本會很高。

其實就是在浪費系統的資源,最好能多個客戶端共享乙個例項.

第二個,同時是最為重要的問題,"cashregisterimpl"例項很想具體的知道關於pricematrix實現細節.而現在它不知道自己所依賴介面的細節。

但是現在cashregisterimpl通過自己建立了pricematrix物件,cashregisterimpl已經完全的和pricematriximpl物件耦合的關聯在一起了。

第三個,實現類已經和cashregisterimpl緊密的結合在一起了,很難進行單元測試。單元測試本身就是應該脫離外部資源的情況下執行.

如果要測試唯一的選擇就是需要完全的執行pricematriximpl.這樣一來不僅會減慢單元測試而且還讓我們無法控制的資源耦合在一起。

可見以上程式實現的三大不足.

要解決第乙個問題,移除pricematrix實現類的例項,這樣就可以讓cashregisterimpl物件從物理實現細節中解放出來了。更重要的是

pricematriximpl物件不再cashregisterimpl例項中,不在屬於cashregisterimpl獨有,而是很容易地被所有類共享。

聽說service locator模式不錯,這個模式的優勢就是:封裝了獲取所需要的物件的引用動作,說白點就是不用你用new關鍵字去建立乙個物件。

這個模式會呼叫所物件的getter方法.具體方法如下。

public class cashregisterimpl implements cashregister

public bigdecimal calculatetotaprice(shoppingcart cart)

return total;

}}雖然從表面上來看使用servicelocator,該類不用關心建立pricematrix例項了.但是第三個存在的問題還是解決不了。

locator方法要求不允許在測試的情況下返回乙個模擬的pricematrix物件,允許你在實際部署中返回乙個真的pricematrix物件,

就是說你可以建立pricematrix例項,但是必須要在外界的資源同步下才能測試。

這時候神秘的人物來了,就是spring框架中的"依賴注入"了,它很靈活,讓你用起來得心應手。它可以有很多中注入方式。

首先說第一種注入:基於構造器注入

public class cashregisterimpl implements cashregister

public bigdecimal calculatetotaprice(shoppingcart cart)

return total;

}}就這樣,簡單的獲取pricematrix物件,看到本書上說的很恰當"你不用來管我要物件,我會主動給你建立好"

另一種注入方式:基於設定方法注入

public class cashregisterimpl implements cashregister

public bigdecimal calculatetotaprice(shoppingcart cart)

return total;

}}選擇那種注入?這個其實不重要,spring框架沒有具體的要求強制用那個方法注入,

基於構造方法注入危險是:在提供不同的例項時候有可能造成構造器氾濫,隨你例項增加,

各個應用程式需要不同的依賴,所以構造器的數目也在不斷的增加。建議還是用設定方法注入。

這樣,就解決了以上事例中的三個問題,解決了互相的依賴關係,還可以輕鬆的模擬出pricematrix

物件,做好測試。從dependency injection 充分的體現出了spring框架的輕量級。

Spring基礎框架三 深入理解SpringMVC

spring mvc屬於springframework的後續產品,spring mvc框架提供了構建web應用程式的全功能mvc模組,是一種輕量級web框架。使用了mvc架構模式的思想,通過把model,view,controller分離,將web層進行職責解耦,把複雜的web應用分成邏輯清晰的幾部...

深入理解spring事務

事務介紹 乙個事務要麼同時成功,要麼同時失敗 特性事務隔離級別 傳播行為 唯讀事務只進行讀取操作 readonly true 告訴spring當前事務只會進行讀取操作,不會進行修改操作,可以幫助資料庫引擎優化 注 如果設定為唯讀的話,千萬不要在事務裡修改資料,使用唯讀操作時,spring不會進行加鎖...

深入理解Spring4框架(四) 依賴

乙個典型的企業應用不止包含乙個物件,即使是乙個簡單的應用,也是由幾個物件合作來完成使用者需要使用的功能。本節將介紹定義的bean是如何在真實系統中配合來完成既定功能的。依賴注入就是在物件構建完成後,為其定義依賴的過程。容器會在建立bean的時候將這些依賴注入進去。這個過程跟我們通常編碼不同,平常我們...