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

在 Java 開發面試中,常常會被問到 Spring IOC 是什麼,讓談談本身的理解。在工做開發中,若是可以理解 Spring IOC 設計模式的話,對排查疑難問題也是頗有幫助的。今天這篇文章就先通俗易懂地介紹一下 Spring IOC 。面試

1、Spring IOC 和 DI

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

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

所謂控制就是對象的建立、初始化、銷燬。大數據

  • 建立對象:原來是 new 一個,如今是由 Spring 容器建立。
  • 初始化對象:原來是對象本身經過構造器或者 setter 方法給依賴的對象賦值,如今是由 Spring 容器自動注入。
  • 銷燬對象:原來是直接給對象賦值 null 或作一些銷燬操做,如今是 Spring 容器管理生命週期負責銷燬對象。

總結:IOC 解決了繁瑣的對象生命週期的操做,解耦了咱們的代碼。設計

所謂反轉對象

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

IOC 能作什麼?資源

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

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

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 開發中深刻人心。

2、總結

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

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

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


本文來自: 微信公衆號【大數據實戰演練】。閱讀更多精彩好文,歡迎關注微信公衆號【大數據實戰演練】。

相關文章
相關標籤/搜索