Spring IOC,看完這篇文章,我才算是懂了

Spring IOC,看完這篇文章,我才算是懂了

每一個成功人士的背後,必定曾經做出過勇敢而又孤獨的決定。

放棄不難,但堅持很酷~

在 Java 開發面試中,經常會被問到 Spring IOC 是什麼,讓談談自己的理解。在工作開發中,如果能夠理解 Spring IOC 設計模式的話,對排查疑難問題也是很有幫助的。今天這篇文章就先通俗易懂地介紹一下 Spring IOC 。

一、Spring IOC 和 DI

參考鏈接:https://zhuanlan.zhihu.com/p/49264919,在知乎上發現了這一篇好文,能比較通俗易懂地介紹 Spring IOC (控制反轉)和DI(依賴注入)概念。我又將其整理成了自己的知識,方便自己理解和與別人交流。

1、IOC:Inversion Of Control,即控制反轉,是一種設計思想。在傳統的 Java SE 程序設計中,我們直接在對象內部通過 new 的方式來創建對象,是程序主動創建依賴對象;而在Spring程序設計中,IOC 是有專門的容器去控制對象。

所謂控制就是對象的創建、初始化、銷燬。

  • 創建對象:原來是 new 一個,現在是由 Spring 容器創建。

  • 初始化對象:原來是對象自己通過構造器或者 setter 方法給依賴的對象賦值,現在是由 Spring 容器自動注入。

  • 銷燬對象:原來是直接給對象賦值 或做一些銷燬操作,現在是 Spring 容器管理生命週期負責銷燬對象。

總結:IOC 解決了繁瑣的對象生命週期的操作,解耦了我們的代碼。

所謂反轉

其實是反轉的控制權,前面提到是由 Spring 來控制對象的生命週期,那麼對象的控制就完全脫離了我們的控制,控制權交給了 Spring 。這個反轉是指:我們由對象的控制者變成了 IOC 的被動控制者。

IOC 能做什麼?

IOC 容器完美解決了耦合問題,甚至可以讓互不相關的對象產生注入關係。

在 IOC 模式下,你只需要設計良好的流程和依賴,定義出需要什麼,然後把控制權交給 Spring 即可。

2、DI:Dependency injection,即依賴注入。

依賴注入是一種實現,而 IOC 是一種設計思想。從 IOC 到 DI ,就是從理論到實踐。程序把依賴交給容器,容器幫你管理依賴,這就是依賴注入的核心。

好處:依賴注入降低了開發的成本,提高了代碼複用率、軟件的靈活性。

誰依賴誰,為什麼需要依賴;誰注入誰,注入了什麼:

  • 誰依賴誰:A對象 依賴於 IOC 容器。

  • 為什麼需要依賴:A對象需要 IOC 容器提供對象需要的數據、B對象 等外部資源,沒有這些資源不能完成業務處理。

  • 誰注入誰:IOC 容器注入 A對象。

  • 注入了什麼:IOC 容器將 A對象 需要的數據、B對象等外部資源按需注入給對象。

IOC 和DI 的關係:

是同一概念不同角度的描述,但實際上也有區別。IOC 強調的是容器和對象的控制權發生了反轉,而 DI 強調的是對象的依賴由容器進行注入。從廣義上講,IOC 是一種開發模式,DI 是其中的一種實現方式,可以理解為:使用依賴注入來實現了控制反轉。Spring 選擇了 DI,從而使 DI 在 Java 開發中深入人心。

二、總結

IOC:是一種設計思想。在 Spring 開發中,由 IOC 容器控制對象的創建、初始化、銷燬等。這也就實現了對象控制權的反轉,由 我們對對象的控制轉變成了Spring IOC 對對象的控制。IOC 解耦了代碼,甚至可以讓互不相關的對象產生注入關係。

DI:是 IOC 的具體實現。程序把依賴交給容器,容器幫你管理依賴,這就是依賴注入的核心。還需要明白 誰依賴誰,為什麼需要依賴;誰注入誰,注入了什麼 等邏輯。

IOC 強調的是容器和對象的控制權發生了反轉,而 DI 強調的是對象的依賴由容器進行注入。

歡迎大家留言討論

Spring IOC,看完這篇文章,我才算是懂了


分享到:


相關文章: