IoC/DI解耦合及實現原理
一、知識拓撲
二、相關概念說明
-
控制反轉:誰控制誰?控制什麼?爲何叫反轉(對應於正向)?哪些方面反轉了?爲何需要反轉?
|-- 誰控制誰?–》 IoC/DI容器控制應程序
|-- 控制什麼? --》 ①IoC/DI同時控制對象本身的創建和實例化;②IoC/DI容器控制對象之間的依賴關係
|-- 哪些方面反轉了? --》 ①創建對象;②程序獲取資源的方式
|-- 爲何需要反轉? --》 ①引入IoC/DI容器過後,體系更爲鬆散,而且管理更有序; ②類之間真正體現了鬆散耦合 -
依賴:什麼是依賴(按名稱理解、按動詞理解)?誰依賴於誰?爲什麼需要依賴?依賴什麼東西?
|-- 什麼是依賴(按名稱理解、按動詞理解)? --》 依賴(按名稱理解):依賴關係;依賴(按動詞理解):依賴的動作
|-- 誰依賴於誰? --》 應用程序依賴於IoC/DI容器
|-- 爲什麼需要依賴? --》 因爲發生了反轉,應用程序依賴的資源都是IoC/DI 容器裏面的
|-- 依賴什麼東西? --》 因爲程序依賴於IoC/DI 容器,依賴IoC/DI 容器爲它注入所需要的資源。(比如:依賴關係) -
注入:誰注入於誰?注入什麼東西?爲何要注入?
|-- 誰注入於誰? --》 IoC/DI容器注入於應用程序
|-- 注入什麼東西? --》 注入應用程序需要的外部資源,比如依賴關係
|-- 爲何要注入? --》 因爲程序要正常運行需要這些外部資源 -
依賴注入和控制反轉是同一概念嗎?
不是同一概念。其實它們兩個描述的是同一件事件,但是是從不同的角度來說:控制反轉是從IoC/DI容器的角度;依賴注入是從應用程序的角度
|-- 控制反轉的描述:IoC/DI容器反過來控制應用程序,控制應用程序所需要的外部資源
|-- 依賴注入的描述:應用程序依賴IoC/DI容器。依賴它注入所需要的外部資源 -
參與者有哪些?
|-- IoC/DI 容器、應用程序 -
IoC/DI是什麼?能做什麼?怎麼做?用在什麼地方?
|-- IoC/DI是什麼?
||-- IoC(Inversion of Control) :就是使用IoC/DI 容器反過來控制應用程序所需要的外部資源,是程序開發思想。
||-- DI(Dependency Injection) :就是應用程序依賴 IoC/DI容器來注入所需要的外部資源,也就是程序的開發思想。
|-- 能做什麼:鬆散耦合對象
|-- 怎麼做:使用Spring框架,裏面有實現好了的IoC/DI容器
|-- 用在什麼地方:凡是程序裏面需要使用外部資源的情況,都可以考慮使用IoC/DI 容器 -
什麼是外部資源?
對於一個類來說,所謂的外部資源,就是指在自己類的內部不能得到或實現的東西,不如說:在類裏面需要讀取一個配置文件,呢麼這個配置文件就相當於這個類的外部資源。又比如:A類裏面需要調用B 類,呢麼對於A 類來說B 類就是外部資源 -
IoC容器
|-- 簡單的理解就是:實現IoC 思想,並提供對象創建、對象裝配以及生命週期管理的軟件就是IoC容器
|-- 對IoC 的理解:
||-- 應用程序無需主動new 對象,而是描述對象應該如何創建
||-- 應用程序不需要主動裝配對象之間的依賴關係,而是描述需要哪個服務,IoC 容器會幫你裝配, 被動接受裝配
||-- 主動變被動,是一種讓服務消費者不直接依賴於服務提供者的組件設計方式,是一種減少類與類之間依賴的設計原則 -
使用IoC/DI 容器開發需要改變思路
|-- 應用程序不主動創建對象,但是要描述創建它們的方式
||-- 以後開發中只要看到有new 操作,就應該考慮使用IoC 容器
||-- 以上的針對成員變量 不是局部變量
|-- 在應用程序代碼中不直接進行服務的裝配,但是要描述哪一個組件需要哪一項服務,由容器負責將這些裝配在一起。也就是說:所有的組件都是被動的,組件初始化和專供都是由容器負責,應用程序只是在獲取相應組件後,實現應用的功能即可。
三、IoC 和DI 使用的底層技術
- xml 配置文件
- dom4j解析xl
- 工廠設計模式
- 反射
- 註解
四、最終目的
程序的高內聚,低耦合