Spring IOC控制反轉原理詳解(圖文並茂)

2024年2月6日 22点热度 0人点赞

大傢好,我是mikechen。

Java面試經常問到IOC控制反轉,比如:IOC控制反轉的作用原理等,下面我就來詳解IOC控制反轉@mikechen

本篇已經收納於mikechen創作的《阿裡架構師進階專題合集》裡面。

IOC控制反轉

IOC,英文全稱是Inversion of Control,翻譯過來就是控制反轉,所以很多提到IOC,就叫IOC控制反轉。

IOC控制反轉能夠將對象之間的依賴關系轉移到容器中進行管理,從而降低了對象之間的耦合性,使得程序更加靈活、可擴展和易於維護。

通過IOC容器管理對象之間的依賴關系,可以使得對象更加獨立、可重用,從而提高了程序的可重用性。

IOC控制反轉原理

IOC不是一種技術,隻是一種思想,它的核心思想是將對象的創建、組裝和管理的控制權交給一個容器,而不是由對象自己進行創建和管理。

在沒有IOC容器之前,傳統應用程序都是由我們在類內部主動創建依賴對象,如下圖所示:

這種方式,從而導致類與類之間高耦合,難於測試,於是後面就了IOC容器。

有了IoC容器後,把創建和查找依賴對象的控制權交給了容器,而不是由對象自己進行創建和管理。

如下圖所示:

上圖引入了IOC容器,使得A、B、C、D這4個對象沒有了耦合關系,齒輪之間的傳動全部依靠“第三方”了。

在IoC中,對象不再負責自己的創建和管理,而是被容器創建和管理,這就是IOC控制反轉的核心思想。

IOC控制反轉實現

在實現IOC的過程中,最重要的是依賴註入DI的機制。

DI的全稱是Dependency Injection,中文稱之為依賴註入,它與控制反轉(IOC)的含義相同,隻不過這兩個稱呼是從兩個角度描述的同一個概念。

在傳統模式下,調用者通常會采用“new 被調用者”的代碼方式來創建對象。

如圖所示:


這種方式會導致調用者與被調用者之間的耦合性增加,不利於後期項目的升級和維護。

在使用Spring框架之後,對象的實例不再由調用者來創建,而是由Spring容器來創建,Spring容器會負責控制程序之間的關系,而不是由調用者的程序代碼直接控制。

這樣,控制權由應用代碼轉到了Spring容器,控制權發生了反轉,這就是Spring的控制反轉IOC。

本篇已經收納於mikechen創作的《阿裡架構師進階專題合集》裡面。