依賴注入和控制反轉

2021-09-01 18:29:37 字數 1639 閱讀 4734

本文**(

ioc:inversion of control 控制反轉

di:dependency injection 依賴注入

要想理解上面兩個概念,就必須搞清楚如下問題:

(1)參與者有誰:

一般有三方參與者,乙個是某個物件;乙個是ioc/di容器;另乙個是物件的外部資源。
(2)誰依賴於誰:

當然是某個物件依賴於ioc/di容器
(3)為什麼需要依賴:

物件需要ioc/di的容器來提供物件需要的外部資源
(4)誰注入於誰:

很明顯是ioc/di的容器注入某個物件
(5)注入什麼:

就是注入某個物件所需的外部資源
(6)誰控制誰:

當然是ioc/di的容器來控制物件了
(7)控制什麼:

主要控制物件例項的建立
(8)為何叫反**

反轉是相對於正向而言的,那麼什麼算是正向呢?考慮一下常規情況下的應用程式,如果要在a裡面使用c,你會怎麼做呢?當然是直接去建立c的物件,也即是說,是在a類中主動去獲取所需要的外部資源c,這種情況被稱為正向的。

那麼什麼是反向呢?就是a類不再主動去獲取c,而是被動等待,等待ioc/di容器獲取乙個c的例項,然後反向的注入到a類中。

沒有ioc/di,常規的a類使用c類的示意圖,如圖所示:

當有了ioc/di的容器後,a類不再主動去建立c了,如圖所示

而是被動等待,等待ioc/di的容器獲取乙個c的例項,然後反向的注入到a類中,如圖所示:

(9)依賴注入和控制反轉是同一概念嗎?

根據上面的講述,應該能看出,依賴注入和控制反轉是對同一件事的不同描述,從某個方面講,就是它們描述的角度不同。

依賴注入是從應用程式的角度在描述,可以把依賴注入描述完整點:應用程式依賴容器建立並注入它所需要的外部資源;

而控制反轉是從容器的角度在描述,描述完整點:容器控制應用程式,有容器反向的向應用程式注入應用程式所需要的外部資源。

小結

其實ioc/di對程式設計來說的最大改變不是從**上,而是從思想上,發生了」主從換位「的變化。

應用程式原本是老大,要獲取什麼資源都是主動出擊,但是在ioc/di思想中,應用程式就變成被動的了,被動的等待ioc/di容器來建立並注入它所需要的資源了。

這麼乙個小小的改變其實是程式設計思想的一大進步,這樣就有效的分離了物件和它所需要的外部資源,使得它們鬆散耦合,有利於功能復用,更重要的是使得程式的整個體系結構變得非常靈活。

控制反轉 依賴注入和控制反轉

依賴注入 di 和控制反轉 ioc 基本是乙個意思,因為說起來誰都離不開誰。簡單來說,a依賴b,但a不控制b的建立和銷毀,僅使用b,那麼b的控制權交給a之外處理,這叫控制反轉 ioc 而a要依賴b,必然要使用b的instance,那麼 通過a的介面,把b傳入 通過a的構造,把b傳入 通過設定a的屬性...

依賴注入和控制反轉

還是從上次機房合作驗收說起,其中乙個特別厲害的師姐提到了依賴注入和控制反轉,剛剛聽到這個的時候,感覺很熟悉,就是不知道在 看到過,想起了公尺老師說的那句話,不怕不知道,就怕不知道 不怕不知道它,就怕遇到了不知道它是什麼意思,我可是上公升到了不知道的第二個階段。廢話不說了,直奔主題吧。記得在哪見過,就...

依賴注入和控制反轉

當呼叫者需要被呼叫者的協助時,在傳統的程式設計過程中,通常由呼叫者來建立被呼叫者的例項,但在這裡,建立被呼叫者的工作不再由呼叫者來完成,而是將被呼叫者的建立移到呼叫者的外部,從而反轉被呼叫者的建立,消除了呼叫者對被呼叫者建立的控制,因此稱為控制反轉。簡言之,控制反轉是將方法中的物件的控制,轉移到外部...