Spring 依賴注入
每一個基於java的應用程序都有一個共同工作來展示給用戶看到的內容作為工作的應用幾個對象。當編寫一個複雜的Java應用程序,應用程序類應該儘可能獨立其他Java類來增加重複使用這些類,並獨立於其他類彆的測試它們,而這樣做單元測試的可能性。依賴注入(或有時稱為布線)有助於粘合這些類在一起,同時保持他們的獨立。
考慮有其中有一個文本編輯器組件的應用程序,要提供拚寫檢查。標準的代碼將看起來像這樣:
public class TextEditor { private SpellChecker spellChecker; public TextEditor() { spellChecker = new SpellChecker(); } }
我們在這裡所做的就是創建文本編輯和拚寫檢查之間的依賴性。在控製方案中的反轉,我們反而會做這樣的事情:
public class TextEditor { private SpellChecker spellChecker; public TextEditor(SpellChecker spellChecker) { this.spellChecker = spellChecker; } }
在這裡,文本編輯不應該擔心拚寫檢查落實。拚寫檢查器將獨立實施,將提供給文本編輯在文本編輯實例化的時候,這整個過程是由Spring框架的控製。
在這裡,我們已經刪除從文本編輯的全麵控製,並保持它在其他地方(即XML配置文件)和依賴性(即類拚寫檢查)被注入到類文本編輯通過類構造函數。因此,流程控製已經“倒”通過依賴注入(DI),因為已經有效地委派依賴一些外部係統。
依賴注入的第二種方法是通過文本編輯類,我們將創建拚寫檢查實例的setter方法,該實例將被用來調用setter方法來初始化文本編輯的屬性。
因此,DI主要有兩種變體和下麵的兩個子章將涵蓋兩者結合實例:
S.N. | 依賴注入類型及說明 |
---|---|
1 |
基於構造函數的依賴注入 當容器調用類的構造函數有多個參數,每個代表在其他類中的構造函數依賴關係為基礎的DI來完成。 |
2 |
基於setter方法的依賴注入 基於setterDI由容器調用setter方法對你的bean調用無參構造器或無參static工廠方法實例化bean之後完成的。 |
你可以混合兩種,構造型和基於setter方法DI,但它是拇指使用構造函數的參數進行強製依賴和setter可選依賴的一個很好的規則。
代碼是清潔器與DI原理,當對象被提供有它們的依賴性的去耦效果更明顯。對象不查詢它的依賴,以及不知道的依賴性的位置或類,而一切都由Spring框架關照。