------------------------------------------------------------------------
理解IoC/DI
1.控制反轉 --> 誰控制誰? 控制什么? 為何叫反轉(對應於正向)?哪些方面反轉了?為何需要反轉?
誰控制誰? --> IoC/DI容器控制應用程序
控制什么? --> IoC/DI容器控制對象本身的創建、實例化; IoC/DI容器控制對象之間的依賴關系
為何叫反轉(對應於正向)? --> 因為現在應用程序不能主動去獲取外部資源了,而是被動等待IoC/DI容器給它注入它所需要的資源,所以稱之為反轉.
哪些方面反轉了? --> 1.創建對象 2.程序獲取資源的方式反了
為何需要反轉? --> 1.引入IoC/DI容器過后,體系更為松散,而且管理更有序; 2.類之間真正實現了松散耦合
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容器開發需要改變思路
a. 應用程序不主動創建對象,但是要描述創建它們的方式
b. 在應用程序代碼中不直接進行服務的裝配,但是要描述哪一個組件需要哪一項服務,由容器負責將這些裝配在一起。也就是說:所有的組件都是被動的,組件初始化和專供都是由容器負責,應用程序只是在獲取相應的組件后,實現應用的功能即可。