最近在學習js的開發框架好比AngularJS、Meteor、Backbone等,這些框架的一個特色就是依賴注入,由於一直對這個概念雲山霧罩,因此特地花時間學習了一下,把學習筆記寫在這裏。html
------------------------------------------------------------------------
框架
控制反轉(IoC:Inversion of Control)函數
依賴注入(DI:Dependency Injection)學習
控制反轉是Java一些開發框架的核心(以Spring爲表明),隨着對這種模式的討論愈來愈熱烈,一位大牛Martin Fowler寫出了一篇深具影響力的文章《Inversion of Control Containers and the Dependency Injection pattern》不光深刻探討了控制反轉這個模式還提出一個更貼切的稱呼---依賴注入,控制反轉和依賴注入實際上是等價的,只不過強調的方面不一樣。ui
IOC控制反轉:說的是建立對象實例的控制權從代碼控制剝離到IOC容器控制,實際就是你在xml文件控制,側重於原理。spa
DI依賴注入:說的是建立對象實例時,爲這個對象注入屬性值或其它對象實例,側重於實現。
.net
Martin的文章也有被翻譯成中文版。翻譯
國內某位大牛在Martin的文章之上寫的解讀:unix
其餘一些文章(目前正在看,但還沒看懂)xml
Object Builder Application Block(中文)
目前大概有三種依賴注入的方式:
類型1 (基於接口): 可服務的對象須要實現一個專門的接口,該接口提供了一個對象,能夠從用這個對象查找依賴(其它服務)。早期的容器Excalibur使用這種模式。
類型2 (基於setter): 經過JavaBean的屬性(setter方法)爲可服務對象指定服務。HiveMind和Spring採用這種方式。
類型3 (基於構造函數): 經過構造函數的參數爲可服務對象指定服務。PicoContainer只使用這種方式。HiveMind和Spring也使用這種方式。