IoC/DI 解耦合及實現原理

一、知識拓撲

在這裏插入圖片描述

二、相關概念說明

  1. 控制反轉:誰控制誰?控制什麼?爲何叫反轉(對應於正向)?哪些方面反轉了?爲何需要反轉?
     |-- 誰控制誰?–》 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(Inversion of Control) :就是使用IoC/DI 容器反過來控制應用程序所需要的外部資源,是程序開發思想。
      ||-- DI(Dependency Injection) :就是應用程序依賴 IoC/DI容器來注入所需要的外部資源,也就是程序的開發思想。
     |-- 能做什麼:鬆散耦合對象
     |-- 怎麼做:使用Spring框架,裏面有實現好了的IoC/DI容器
     |-- 用在什麼地方:凡是程序裏面需要使用外部資源的情況,都可以考慮使用IoC/DI 容器

  7. 什麼是外部資源?
      對於一個類來說,所謂的外部資源,就是指在自己類的內部不能得到或實現的東西,不如說:在類裏面需要讀取一個配置文件,呢麼這個配置文件就相當於這個類的外部資源。又比如:A類裏面需要調用B 類,呢麼對於A 類來說B 類就是外部資源

  8. IoC容器
     |-- 簡單的理解就是:實現IoC 思想,並提供對象創建、對象裝配以及生命週期管理的軟件就是IoC容器
     |-- 對IoC 的理解:
      ||-- 應用程序無需主動new 對象,而是描述對象應該如何創建
      ||-- 應用程序不需要主動裝配對象之間的依賴關係,而是描述需要哪個服務,IoC 容器會幫你裝配, 被動接受裝配
      ||-- 主動變被動,是一種讓服務消費者不直接依賴於服務提供者的組件設計方式,是一種減少類與類之間依賴的設計原則

  9. 使用IoC/DI 容器開發需要改變思路
     |-- 應用程序不主動創建對象,但是要描述創建它們的方式
      ||-- 以後開發中只要看到有new 操作,就應該考慮使用IoC 容器
      ||-- 以上的針對成員變量 不是局部變量
     |-- 在應用程序代碼中不直接進行服務的裝配,但是要描述哪一個組件需要哪一項服務,由容器負責將這些裝配在一起。也就是說:所有的組件都是被動的,組件初始化和專供都是由容器負責,應用程序只是在獲取相應組件後,實現應用的功能即可。

三、IoC 和DI 使用的底層技術

  • xml 配置文件
  • dom4j解析xl
  • 工廠設計模式
  • 反射
  • 註解

四、最終目的

程序的高內聚,低耦合

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章