IOC/DI是什麼(二)

在Spring中,全部的bean都在Spring容器中登記,Spring容器在程序運行到適當的時候,把當前對象須要的資源主動給當前對象,同時也把當前對象做爲一種資源交給其餘須要當前對象的對象,全部對象的建立、銷燬都由Spring容器來控制。之前對象的生命週期,是由引用它的對象決定的,實際上也就是程序決定的,如今全部對象都由Spring容器來控制,控制權由程序代碼交給了容器,這叫控制反轉。數據庫

IOC的一個重點,是在系統運行期間,容器動態的向對象提供其所需的資源,也就是真正須要的時候,纔給相應的資源,程序裏不主動建立所須要的對象,也就不存在依賴,這樣令項目中層與層之間、組件之間的耦合度變小了。舊的方式是在程序裏主動new一個對象,這樣就會造成依賴,致使系統的耦合度較高。spa

舉個例子,Dao層中有一個類A,包含了數據庫CRUD操做的相應方法,A類首先須要一個Connection對象,才能完成CRUD操做,所以A依賴於Connection,舊的方式是在A中new一個Connection對象,這樣A與Connection就產生了耦合,爲何這麼說呢?由於咱們須要在Dao層中去寫一個獲取Connection的實現類,這個類中包含了Connection須要的相關信息,好比數據庫密碼、用戶名等,若是更換數據庫,那麼一定要改變相應的實現類,所以耦合度高。若是換成使用Spring容器來管理這些資源,在程序中,或者說在Dao層,則不須要寫一個專門的類來獲取Connection資源,在合適的時機,Spring容器會將Connection對象自動注入到A中,那麼到底是如何實現DI(依賴注入)的呢?Java中有個概念叫反射,經過反射容許程序在運行中,動態的生成對象,執行對象方法,獲取對象的屬性。Spring就是經過反射來實現依賴注入的。對象

總結:控制反轉是什麼?獲取依賴對象的方式被反轉了,依賴注入實際是另外一種說法,或者說是另外一個角度看待同一個問題。生命週期

相關文章
相關標籤/搜索