84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
網上搜了一下,感覺還是不能理解
认证0级讲师
依賴注入:程式運作過程中,如需另一個物件協作(呼叫它的方法、存取他的屬性)時,無須在程式碼中建立被呼叫者,而是依賴外部容器的注入
下面這個例子可能更有趣
理解依賴注入:
一個人(Java實例,呼叫者)需要一把斧子(Java實例,被呼叫者)
在原始社會裡,幾乎沒有社會分工;需要斧子的人(調用者)只能自己去磨一把斧子(被調用者);對應情形為:Java程式裡的調用者自己創建被調用者,通常採用new關鍵字呼叫建構器建立一個被呼叫者
進入工業社會,工廠出現了,斧子不再由普通人完成,而在工廠裡被生產出來,此時需要斧子的人(調用者)找到工廠,購買斧子,無須關心斧子的製造過程;對應簡單工廠設計模式,呼叫者只需定位工廠,無須管理被調用者的具體實現
進入「共產主義」社會,需要斧子的人甚至無須定位工廠,「坐等」社會提供即可;調用者無須關心被調用者的實現,無須理會工廠,等待Spring依賴注入
總之依賴注入的意思是你需要的東西不是由你創建的,而是第三方,或者說容器提供給你的。這樣的設計符合正交性,即所謂的鬆散耦合。
個人理解,依賴注入是呼叫者僅透過聲明某個元件就可以獲得元件的控制權,而對該元件的依賴關係管理、尋找、載入由外部完成。
AngularJS中是由$injector進行這項工作。 例如,我在一個服務中註入了$http,并用hehe進行呼叫:
$injector
$http
hehe
.service('myService',['$http',function(hehe) { this.getUserActivities = function(username){ return hehe({ method: 'JSONP', url:'https://api.github.com/users/'+username+'/events?callback=JSON_CALLBACK' }); } }])
依賴注入就是你不用關心物件的生命週期,什麼時候被創建,什麼時候銷毀,只需直接使用即可,物件的生命週期由提供依賴注入的框架來管理。
我補充一點:關於依賴注入和控制反轉其實是一個概念的。 @Wang_Bourne
http://www.cnblogs.com/kinglongdai/p/3269049.html 慕課網:http://www.imooc.com/video/4907
理論上理解總是有點談玄論道的感覺 推薦你看一些依賴注入的開源框架 例如RoboGuice 實踐出真知 sorry 走錯門了 沒有看分類 RoboGuice是android的框架 不過道理是一樣的
依賴注入(Dependency Injection,DI)也叫也被稱為反轉控制(Inversion of Control, IoC),即將類別和類別、方法和方法之間的關係透過第三方(如配置檔案)進行“注入” ,不需要類別或類別方法自己去解決彼此間的呼叫關係。傳統應用程式通常是在類別內部執行程式碼中主動創建這個類別所依賴的其它對象,從而導致類別與類別之間發生緊密耦合,使得類別難於測試和隔離,最終導致系統的擴展和維護異常困難。依賴注入用來解決元件之間依賴關係、配置及生命週期管理,透過轉移物件控制權,可以解決類別之間的耦合問題,物件與物件之間是鬆散耦合關係,更重要的是使得應用程式體系結構變得非常靈活,很好的體現了物件導向的設計法則之一—依賴設計原則,即著名的好萊塢原則:「Don't call us, we'll call you.(不要調用我們,我們會調用你)。
angular.js 裡面就很多這種思想。
包括 var net = require('net');
都醬紫的。
依賴注入
其實就是說目前的物件所具有的特徵屬性是依賴外部注入的物件的來決定的。 好比你家開製鞋廠, 有個生產鞋的方法 make。
function shoes() { this.make = function() { .... } }
由於市場需要,有些大牌運動鞋公司需要你們家工廠代工生產,會給你一大包原料,你們工廠拿到原料生產,然後貼牌即可。
function shoes(material) { this.material = material; this.make = function() { .... } }
這樣,如果是 nike 需要你代工,給你 nike 家的材料對象,你就可以生產出 nike 家的運動鞋,adidas 家給你他們家的材料,你就可以生產出他們家的鞋子。
也就是你們家鞋廠生產的鞋子到底是 A 家還是 N 家的鞋子,是依賴提供你材料的是 A 家還是 N 家。
在物件導向程式設計中,我們經常處理處理的問題就是解耦,程式的耦合性越低表示這個程式的可讀性以及可維護性越高。控制反轉(Inversion of Control或IoC)就是常用的物件導向程式設計的設計原則,使用這個原則我們可以降低耦合性。其中依賴注入是控制反轉最常用的實作。
具體訪問說說依賴注入
非常簡單的個人理解,依賴注入其實並不難,是一件很自然的事情,現實生活其實比程序難:依賴注入:你是一個人,你要去打獵,需要一把槍,這時候有兩個選擇,第一個選擇,你自己去造,顯然不可取,這就是強耦合。第二個選擇,你去商店裡面買,這就是依賴注入,因為是從外面注入給你的,透過買,解除自己造的難題,透過注入,解除依賴。多簡單的事。 控制反轉準則:依賴抽象,而不要依賴於具體的東西, 你去買槍的時候,你的腦海中要有這個槍的抽象概念,你只需要告訴槍店老闆,這個槍在你腦海中的抽象形象就可以了。而且你是神創造的,神要測試一下你這個獵人的時候,神如果要給你去創造一把槍就比較麻煩,但是如果你的袋子裡面有一張槍的說明書,那就好辦了,神分分鐘幫你弄出一把槍來。說得更土一點,不要去依賴具體的槍,而要去依賴槍的說明書,這就是控制反轉準則。 很顯然,現實生活中,我們就是這樣去幹的。 容器:相當於現實生活中的一個超級厲害的工廠,神(程式設計師)負責不斷的給他升級,一般都是bind, 你告訴他什麼,他都可以幫你生產,然後再免費送給你。所有的髒活累活,工廠都幫你做了,所在而你只負責在一邊,享受生活。這個工廠,就是實現依賴注入的難度。
再進一步的理解,依賴注入,就等於,共產主義社會。
依賴注入:程式運作過程中,如需另一個物件協作(呼叫它的方法、存取他的屬性)時,無須在程式碼中建立被呼叫者,而是依賴外部容器的注入
下面這個例子可能更有趣
理解依賴注入:
一個人(Java實例,呼叫者)需要一把斧子(Java實例,被呼叫者)
在原始社會裡,幾乎沒有社會分工;需要斧子的人(調用者)只能自己去磨一把斧子(被調用者);對應情形為:Java程式裡的調用者自己創建被調用者,通常採用new關鍵字呼叫建構器建立一個被呼叫者
進入工業社會,工廠出現了,斧子不再由普通人完成,而在工廠裡被生產出來,此時需要斧子的人(調用者)找到工廠,購買斧子,無須關心斧子的製造過程;對應簡單工廠設計模式,呼叫者只需定位工廠,無須管理被調用者的具體實現
進入「共產主義」社會,需要斧子的人甚至無須定位工廠,「坐等」社會提供即可;調用者無須關心被調用者的實現,無須理會工廠,等待Spring依賴注入
總之依賴注入的意思是你需要的東西不是由你創建的,而是第三方,或者說容器提供給你的。這樣的設計符合正交性,即所謂的鬆散耦合。
個人理解,依賴注入是呼叫者僅透過聲明某個元件就可以獲得元件的控制權,而對該元件的依賴關係管理、尋找、載入由外部完成。
AngularJS中是由
$injector
進行這項工作。例如,我在一個服務中註入了
$http
,并用hehe
進行呼叫:依賴注入就是你不用關心物件的生命週期,什麼時候被創建,什麼時候銷毀,只需直接使用即可,物件的生命週期由提供依賴注入的框架來管理。
我補充一點:關於依賴注入和控制反轉其實是一個概念的。
@Wang_Bourne
http://www.cnblogs.com/kinglongdai/p/3269049.html
慕課網:http://www.imooc.com/video/4907
理論上理解總是有點談玄論道的感覺 推薦你看一些依賴注入的開源框架 例如RoboGuice 實踐出真知
sorry 走錯門了 沒有看分類 RoboGuice是android的框架 不過道理是一樣的
依賴注入(Dependency Injection,DI)也叫也被稱為反轉控制(Inversion of Control, IoC),即將類別和類別、方法和方法之間的關係透過第三方(如配置檔案)進行“注入” ,不需要類別或類別方法自己去解決彼此間的呼叫關係。傳統應用程式通常是在類別內部執行程式碼中主動創建這個類別所依賴的其它對象,從而導致類別與類別之間發生緊密耦合,使得類別難於測試和隔離,最終導致系統的擴展和維護異常困難。依賴注入用來解決元件之間依賴關係、配置及生命週期管理,透過轉移物件控制權,可以解決類別之間的耦合問題,物件與物件之間是鬆散耦合關係,更重要的是使得應用程式體系結構變得非常靈活,很好的體現了物件導向的設計法則之一—依賴設計原則,即著名的好萊塢原則:「Don't call us, we'll call you.(不要調用我們,我們會調用你)。
angular.js 裡面就很多這種思想。
包括 var net = require('net');
都醬紫的。
依賴注入
其實就是說目前的物件所具有的特徵屬性是依賴外部注入的物件的來決定的。
好比你家開製鞋廠, 有個生產鞋的方法 make。
由於市場需要,有些大牌運動鞋公司需要你們家工廠代工生產,會給你一大包原料,你們工廠拿到原料生產,然後貼牌即可。
這樣,如果是 nike 需要你代工,給你 nike 家的材料對象,你就可以生產出 nike 家的運動鞋,adidas 家給你他們家的材料,你就可以生產出他們家的鞋子。
也就是你們家鞋廠生產的鞋子到底是 A 家還是 N 家的鞋子,是依賴提供你材料的是 A 家還是 N 家。
在物件導向程式設計中,我們經常處理處理的問題就是解耦,程式的耦合性越低表示這個程式的可讀性以及可維護性越高。控制反轉(Inversion of Control或IoC)就是常用的物件導向程式設計的設計原則,使用這個原則我們可以降低耦合性。其中依賴注入是控制反轉最常用的實作。
具體訪問說說依賴注入
非常簡單的個人理解,依賴注入其實並不難,是一件很自然的事情,現實生活其實比程序難:
依賴注入:你是一個人,你要去打獵,需要一把槍,這時候有兩個選擇,第一個選擇,你自己去造,顯然不可取,這就是強耦合。第二個選擇,你去商店裡面買,這就是依賴注入,因為是從外面注入給你的,透過買,解除自己造的難題,透過注入,解除依賴。多簡單的事。
控制反轉準則:依賴抽象,而不要依賴於具體的東西, 你去買槍的時候,你的腦海中要有這個槍的抽象概念,你只需要告訴槍店老闆,這個槍在你腦海中的抽象形象就可以了。而且你是神創造的,神要測試一下你這個獵人的時候,神如果要給你去創造一把槍就比較麻煩,但是如果你的袋子裡面有一張槍的說明書,那就好辦了,神分分鐘幫你弄出一把槍來。說得更土一點,不要去依賴具體的槍,而要去依賴槍的說明書,這就是控制反轉準則。 很顯然,現實生活中,我們就是這樣去幹的。
容器:相當於現實生活中的一個超級厲害的工廠,神(程式設計師)負責不斷的給他升級,一般都是bind, 你告訴他什麼,他都可以幫你生產,然後再免費送給你。所有的髒活累活,工廠都幫你做了,所在而你只負責在一邊,享受生活。這個工廠,就是實現依賴注入的難度。
再進一步的理解,依賴注入,就等於,共產主義社會。