依賴注入和控制反轉

2022-02-07 23:23:15 字數 1598 閱讀 7199

ioc——inversion of control  控制反轉

di——dependency injection   依賴注入

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

下面就來簡要的回答一下上述問題,把這些問題搞明白了,ioc/di也就明白了。

參與者都有誰:一般有三方參與者,乙個是某個物件;乙個是ioc/di的容器;另乙個是某個物件的外部資源。又要名詞解釋一下,某個物件指的就是任意的、普通的物件; ioc/di的容器簡單點說就是指用來實現ioc/di功能的乙個框架程式;物件的外部資源指的就是物件需要的,但是是從物件外部獲取的,都統稱資源,比如:物件需要的其它物件、或者是物件需要的檔案資源等等。

誰依賴於誰:當然是某個物件依賴於ioc/di的容器

為什麼需要依賴:物件需要ioc/di的容器來提供物件需要的外部資源

誰注入於誰:很明顯是ioc/di的容器 注入 某個物件

到底注入什麼:就是注入某個物件所需要的外部資源

誰控制誰:當然是ioc/di的容器來控制物件了

控制什麼:主要是控制物件例項的建立

為何叫反**反轉是相對於正向而言的,那麼什麼算是正向的呢?考慮一下常規情況下的應用程式,如果要在a裡面使用c,你會怎麼做呢?當然是直接去建立c的物件,也就是說,是在a類中主動去獲取所需要的外部資源c,這種情況被稱為正向的。那麼什麼是反向呢?就是a類不再主動去獲取c,而是被動等待,等待ioc/di的容器獲取乙個c的例項,然後反向的注入到a類中。

用圖例來說明一下,先看沒有ioc/di的時候,常規的a類使用c類的示意圖,如圖所示:

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

a類不再主動建立c

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

有ioc/di容器後程式結構示意圖

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

根據上面的講述,應該能看出來,依賴注入和控制反轉是對同一件事情的不同描述,從某個方面講,就是它們描述的角度不同。依賴注入是從應用程式的角度在描述,可以把依賴注入描述完整點:應用程式依賴容器建立並注入它所需要的外部資源;而控制反轉是從容器的角度在描述,描述完整點:容器控制應用程式,由容器反向的向應用程式注入應用程式所需要的外部資源。

實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的屬性...

依賴注入和控制反轉

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

依賴注入和控制反轉

本文 ioc inversion of control 控制反轉 di dependency injection 依賴注入 要想理解上面兩個概念,就必須搞清楚如下問題 1 參與者有誰 一般有三方參與者,乙個是某個物件 乙個是ioc di容器 另乙個是物件的外部資源。2 誰依賴於誰 當然是某個物件依賴...