1. 程式人生 > >對依賴注入的理解

對依賴注入的理解

  依賴注入是指當一個物件要與其他物件發生依賴關係時,通過抽象來注入所依賴的物件。A物件依賴於B物件,等價於A物件內部存在對B物件的“呼叫”,而前提是A物件內部拿到了B物件的引用。B物件的引用的來源無非有以下幾種:A物件內部建立(無論是作為欄位還是作為臨時變數)、構造器注入、屬性注入、方法注入。後面三種方式統稱為“依賴注入”,而第一種方式我也生造了一個名詞,稱為“依賴內生”,二者根本的差異即在於,我所依賴的物件的建立工作是否由我自己來完成。當然,這個是廣義的依賴注入的概念,而我們一般不會這樣來使用。我們通常使用的,是依賴注入的狹義的概念。

  構造注入是指通過建構函式來傳入具體類的物件,設值注入是指通過setter方法來傳入具體類的物件,而介面注入是指通過實現在介面中宣告的業務方法來傳入具體類的物件。這些方法在定義時使用的是抽象型別(引數定義),在執行時再傳入具體型別的物件(傳引數時傳具體的),由子類物件來覆蓋父類物件。

  “依賴注入”常常用於擴充套件,尤其是在開發框架的設計中。從某種意義上來說,任何開發框架,天生都是不完整的應用程式。因此,一個優秀的開發框架,不僅要讓開發者能夠重用這些久經考驗的的卓越的解決方案,也要讓開發者能夠向框架中插入自定義的業務邏輯,從而靈活自由地適應特定的業務場景的需要——也就是說要具備良好的可擴充套件性。框架良好的擴充套件性都與“依賴注入”的使用密不可分!

  比如我們使用介面回撥;setListener等等都是依賴注入的原理。