在 Java 開發面試中,常常會被問到 Spring IOC 是什麼,讓談談本身的理解。在工做開發中,若是可以理解 Spring IOC 設計模式的話,對排查疑難問題也是頗有幫助的。今天這篇文章就先通俗易懂地介紹一下 Spring IOC 。面試
參考連接:
IOC:Inversion Of Control,即控制反轉,是一種設計思想。在傳統的 Java SE 程序設計中,咱們直接在對象內部經過 new 的方式來建立對象,是程序主動建立依賴對象;而在Spring程序設計中,IOC 是有專門的容器去控制對象。設計
所謂控制就是對象的建立、初始化、銷燬。cdn
總結:IOC 解決了繁瑣的對象生命週期的操做,解耦了咱們的代碼。對象
所謂反轉:生命週期
實際上是反轉的控制權,前面提到是由 Spring 來控制對象的生命週期,那麼對象的控制就徹底脫離了咱們的控制,控制權交給了 Spring 。這個反轉是指:咱們由對象的控制者變成了 IOC 的被動控制者。資源
IOC 能作什麼?開發
IOC 容器完美解決了耦合問題,甚至可讓互不相關的對象產生注入關係。it
在 IOC 模式下,你只須要設計良好的流程和依賴,定義出須要什麼,而後把控制權交給 Spring 便可。io
DI:Dependency injection,即依賴注入。
依賴注入是一種實現,而 IOC 是一種設計思想。從 IOC 到 DI ,就是從理論到實踐。程序把依賴交給容器,容器幫你管理依賴,這就是依賴注入的核心。
好處:依賴注入下降了開發的成本,提升了代碼複用率、軟件的靈活性。
誰依賴誰,爲何須要依賴;誰注入誰,注入了什麼:
IOC 和DI 的關係:
是同一律念不一樣角度的描述,但實際上也有區別。IOC 強調的是容器和對象的控制權發生了反轉,而 DI 強調的是對象的依賴由容器進行注入。從廣義上講,IOC 是一種開發模式,DI 是其中的一種實現方式,能夠理解爲:使用依賴注入來實現了控制反轉。Spring 選擇了 DI,從而使 DI 在 Java 開發中深刻人心。
IOC:是一種設計思想。在 Spring 開發中,由 IOC 容器控制對象的建立、初始化、銷燬等。這也就實現了對象控制權的反轉,由 咱們對對象的控制 轉變成了 Spring IOC 對對象的控制。IOC 解耦了代碼,甚至可讓互不相關的對象產生注入關係。
DI:是 IOC 的具體實現。程序把依賴交給容器,容器幫你管理依賴,這就是依賴注入的核心。還須要明白 誰依賴誰,爲何須要依賴;誰注入誰,注入了什麼 等邏輯。
IOC 強調的是容器和對象的控制權發生了反轉,而 DI 強調的是對象的依賴由容器進行注入。