每一個基于java的應用程式都有一個共同工作來展示給使用者看到的内容作為工作的應用幾個對象。當編寫一個複雜的Java應用程式,應用程式類應該盡可能獨立其他Java類來增加重複使用這些類,并獨立于其他類别的測試它們,而這樣做單元測試的可能性。依賴注入(或有時稱為布線)有助于粘合這些類在一起,同時保持他們的獨立。
考慮有其中有一個文本編輯器元件的應用程式,要提供拼寫檢查。标準的代碼将看起來像這樣:public class TextEditor {
private SpellChecker spellChecker;
public TextEditor() {
spellChecker = new 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架構關照。
原文釋出時間為:2018-10-20
本文來自雲栖社群合作夥伴“
Java雜記”,了解相關資訊可以關注“
”。