依賴注入(DI)是一種設(shè)計模式,可以從編程代碼中刪除依賴,以便可以輕松管理和測試應(yīng)用程序。依賴注入使我們的編程代碼松散耦合。為了更好地理解DI,讓我們首先了解依賴關(guān)系查找(DL):
依賴查找是一種在需求之后獲取資源的方法。例如,可以有多種獲取資源的方法:
A obj = new AImpl();
這樣,我們可以通過new關(guān)鍵字直接獲取資源(A類的實例)。另一種方法是工廠方法:
A obj = A.getA();
這樣,我們通過調(diào)用靜態(tài)工廠方法getA()獲取資源(A類的實例)。
或者,我們可以通過JNDI(Java命名目錄接口)獲取資源。 :
Context ctx = new InitialContext(); Context environmentCtx = (Context) ctx.lookup("java:comp/env"); A obj = (A)environmentCtx.lookup("A");
可以有多種獲取資源的方法來獲取資源。讓我們看看這種方法的問題。
主要有兩個依賴關(guān)系查找問題。
緊密耦合: 依賴關(guān)系查找方法使代碼緊密耦合。如果更改了資源,則需要對代碼進行大量修改。 測試不容易: 這種方法在測試應(yīng)用程序時會產(chǎn)生很多問題,尤其是在黑盒測試中。
依賴注入是一種設(shè)計模式,它消除了程式。在這種情況下,我們提供來自外部源(例如XML文件)的信息。它使我們的代碼松散耦合,并且更易于測試。在這種情況下,我們將代碼編寫為:
class Employee{ Address address; Employee(Address address){ this.address=address; } public void setAddress(Address address){ this.address=address; } }
在這種情況下,Address類的實例由外部源(例如XML文件)通過構(gòu)造函數(shù)或setter方法提供。
Spring框架提供了兩種注入依賴項的方法
通過構(gòu)造方法 通過Setter方法