對Spring IOC容器的思考

  最近在看Spring5的影片教學,學到了IOC容器這塊,對IOC有些淺薄的理解,分享一二;有錯誤之處,還請大佬指出

 

  IOC(Inversion of Control 控制反轉),是面向對象編程中的一種設計原則,可以用來減低電腦程式碼之間的耦合度。什麼叫降低耦合度,大致理解就是在對程式碼進行維護升級的時候,盡量不去動源程式碼,而是採用其它方式來進行功能實現,而最常用的就是利用DI(Dependency Injection 依賴注入),通過更改配置文件的方式,來進行升級維護

  在討論IOC容器之前,我們要思考,為什麼我們要解耦,先來個例子:

    我們每天所使用的手機可以理解為一個Phone類實例,其中它有很多組成部分來構成,比如CPU、螢幕、喇叭等等。。。這些基礎的元素就是類中的一個個屬性,我們也可以稱之為手機的依賴,DI(依賴注入)你就可以理解為一個給屬性賦值的動作。然後具體的屬性比如螢幕,它又屬於Screen類的一個實例,它也有自己的一些屬性,比如玻璃、螢幕中間的感測器等等。這樣從大到小,每個類由好多屬性構成,每個屬性又是一個類實例,又繼續分下去,可以想像當我們要造一個最新的IPhone 13手機的時候,要為每個基礎屬性賦值(注入依賴),不斷的new實例(比如new Glass()),然後將實例作為上一層類的屬性注入,然後再重複封裝,直到最後組裝成為一個IPhone 13手機,這時候我們才造好了一個手機。如果我們還要造另外的手機IPhone 13Pro,那麼我們又要對程式碼進行大規模的改動。牽一髮(製造另外的手機)而動全身(更改手機的基本屬性)

 

 

在實際的開發過程中,其實也是在各種類實例、基本數據類型作為類的屬性,這將是一個巨大的工程,沒人敢這麼玩。

  因此這時候,我們就需要解耦,怎麼解呢?這就涉及到了今天的主題:IOC容器。

  IOC容器是幹嘛的呢,它其實就是解決了在實際開發過程中不用new的方式來造對象,而最常用的就是採用DI注入依賴(DI後面馬上會重新寫一個部落格再說說我的看法),最常用的就是按配置文件來進行注入,通過DI利用反射+工廠模式,來動態的幫我們造對象,省去了上面說所的手動new的工程,在實際開發中,我們只需要對修改配置文件(DI需要用到的),就可以完成功能的升級、完善。這樣,底層源程式碼還是底層源程式碼,不需要去改動,所要做的事就只是改我們的配置文件。

 

Tags: