本文轉載自部落格:https://www.cnblogs.com/xinhuaxuan/p/6132372.html
1、控制反轉:誰控制誰?控制什麼?為何叫反轉(對應於正向)?哪些方面反轉了?為何需要反轉?
- 誰控制誰?
IoC/DI 容器控制應用程式。
- 控制什麼?
IoC/DI 容器控制物件本身的建立、例項化;IoC/DI 容器控制物件之間的依賴關係。
- 為何叫反轉(對應於正向)?
因為現在應用程式不能主動去獲取外部資源了,而是被動等待 IoC/DI 容器給它注入它所需要的資源,所以稱之為反轉。
- 哪些方面反轉了?
建立物件的方式;程式獲取資源的方式。
- 為何需要反轉?
引入 IoC/DI 容器過後,體系更為鬆散,而且管理更有序;類之間真正實現了鬆散耦合。
2、依賴:什麼是依賴(按名稱理解、按動詞理解)?誰依賴於誰?為什麼需要依賴?依賴什麼東西?
- 什麼是依賴(按名稱理解、按動詞理解)?
按名稱理解:依賴關係;按動詞理解:依賴的動作。
- 誰依賴於誰?
應用程式依賴於 IoC/DI 容器。
- 為什麼需要依賴?
因為發生了反轉,應用程式依賴的資源都是 IoC/DI 容器裡面。
- 依賴什麼東西?
應用程式依賴於 IoC/DI 容器,依賴 IoC/DI 容器為它注入所需要的資源(如:依賴關係)。
3、注入:誰注入於誰?注入什麼東西?為何要注入?
- 誰注入於誰?
IoC/DI 容器注入於應用程式。
- 注入什麼東西?
注入應用程式需要的外部資源(如:依賴關係)。
- 為何要注入?
因為程式要正常執行需要這些外部資源。
4、依賴注入和控制反轉是同一概念嗎?
- 不是同一概念,但實際上它們描述的是同一件事情,只不過是從不同角度來說的:控制反轉是從 IoC/DI 容器的角度;依賴注入是從應用程式的角度。
- 控制反轉的描述:IoC/DI 容器反過來控制應用程式,控制應用程式鎖所需要的外部資源(如:外部資源)。
- 依賴注入的描述:應用程式依賴 IoC/DI 容器,依賴它注入所需要的外部資源。
5、參與者都有哪些?
- IoC/DI 容器、應用程式。
6、IoC/DI 是什麼?能做什麼?怎麼做?用在什麼地方?
- IoC/DI 是什麼?
IoC:就是使用 IoC/DI 容器反過來控制應用程式所需要的外部資源,這樣的一種程式開發思想。
DI:就是應用程式依賴 IoC/DI 容器來注入所需要的外部資源,這樣一種程式的開發思想。
- 能做什麼?
鬆散耦合物件。
- 怎麼做?
可以選擇使用 Spring 框架,裡面有大量已經實現了的 IoC/DI 容器。
- 用在什麼地方?
凡是程式裡面需要使用外部資源的情況,都可以考慮使用 IoC/DI 容器。
7、什麼是外部資源?
- 對於一個類來講,外部資源就是指在本類內部不能得到或實現的東西,比如:在類裡面需要讀取一個配置檔案,那麼這個配置檔案就相當於這個類的外部資源。又比如:A 類裡面要呼叫 B 類,那麼對於 A 類來講 B 類就是其外部資源。
8、什麼是 IoC 容器?
- 簡單理解就是:實現 IoC 思想,並提供物件建立、物件裝配以及物件生命週期管理的軟體就是 IoC 容器。
- 對 IoC 的理解:
a、應用程式無需主動 new 物件,而是描述物件應該如何被建立。
b、應用程式不需要主動裝配物件之間的依賴關係,而是描述需要哪個服務,IoC 容器會幫你裝配,你只需被動接受裝配。
c、主動變被動,是一種讓服務消費者不直接依賴於服務提供者的元件設計方式,是一種減少類與類之間依賴的設計原則。
9、使用 IoC/DI 容器開發需要改變思路
- 應用程式不主動建立物件,但要描述建立它們的方式。
- 在應用程式程式碼中不直接進行服務的裝配,但是要描述哪一個元件需要哪一項服務,由容器負責將它們裝配在一起。也就是說:所有的元件都是被動的,元件初始化和專供都由容器負責,應用程式只是在獲取相應元件後實現功能即可。