控制反轉(IOC)和依賴注入(DI)的區別


IoC控制反轉IoCInversion of Control

    是一個概念,是一種思想。控制反轉就是對對象控制權的轉移,從程序代碼本身反轉到了外部容器。把對象的創建、初始化、銷毀等工作交給spring容器來做。由spring容器控制對象的生命周期。即是new 的過程交給spring容器去處理

  (例如:早上去早餐店買了一個包子,包子是早餐店做的,你通過錢買下了包子,包子的決定權就從早餐店轉移到了你的手上)

 

DI依賴注入

依賴注入DI是指程序運行過程中,若需要調用另一個對象協助時,無須在代碼中創建被調用者,而是依賴於外部容器,由外部容器創建后傳遞給程序。依賴注入是目前最優秀的解耦方式。依賴注入讓SpringBean之間以配置文件的方式組織在一起,而不是以硬編碼的方式耦合在一起的。

 

 

要理解這兩個概念,首先要搞清楚以下幾個問題:

 參與者都有誰?
    依賴:誰依賴於誰?為什么需要依賴?
    注入:誰注入於誰?到底注入什么?
    控制反轉:誰控制誰?控制什么?為何叫反轉(有反轉就應該有正轉了)?
    依賴注入和控制反轉是同一概念嗎?

      下面就來簡要的回答一下上述問題,把這些問題搞明白了,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類中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM