首頁  >  文章  >  Java  >  控制反轉和依賴注入有什麼區別

控制反轉和依賴注入有什麼區別

清浅
清浅原創
2019-04-24 14:44:0221104瀏覽

控制反轉與依賴注入的區別有:依賴注入從應用程式的角度來描述,而控制反轉是從容器的角度描述;控制反轉側重於原理,而依賴注入側重於實現。

控制反轉和依賴注入有什麼區別

【推薦課程:#Java教學

##控制反轉與依賴注入的差異

IOC   inversion of control  控制反轉

DI   Dependency Injection  依賴注入

##要理解這兩個概念,首先要搞清楚以下幾個問題:參與者都有誰?

依賴:誰依賴誰?為什麼需要依賴? 

注入:誰注入於誰?到底注入什麼?

控制反轉:誰控制誰?控制什麼?為何叫反轉(有反轉就應該有正轉了)?

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

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

(1)參與者都有誰:

一般有三方參與者,一個是某個物件;一個是IOC/DI的容器;另一個是某個物件的外部資源。 某個物件指的就是任意的、普通的Java物件

IOC/DI的容器簡單點說就是指用來實作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容器來創建並註入它所需要的資源了。這麼小小的一個改變​​其實是程式設計思想的一個大進步,這樣就有效的分離了物件和它所需要的外部資源,使得它們鬆散耦合,有利於功能復用,更重要的是使得程式的整個體系結構變得非常靈活###

以上是控制反轉和依賴注入有什麼區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn