IOC: Inversion of Control 控制反轉 是一種設計思想,意味着將你設計好的對象交給容器控制,而非傳統的在對象內部直接控制。
IOC 控制了對象的創建,傳統的是在對象內部new對象創建。
反轉理解:傳統的對象是由我們在程序中主動去控制對象的創建,叫做正傳,那麼被動由容器來創建及注入依賴對象的話叫做反轉。
IOC的功能:
依賴注入(DI) xml配置中的ref標籤 對應spring的 RuntimeBeanRefence對象
依賴檢查
自動裝配
支持集合
指定初始化方法和銷燬方法
支持回調某些方法(需要實現spring接口,有侵入性)
對於IOC來說,最重要的是容器,來控制Bean的生命週期,控制着Bean的依賴注入。
Spring 設計了兩個接口用以表示容器:
BeanFactory -- HashMap,key是Bean Name,Value是Bean的實例,
通常只提供 註冊(put) 和 獲取 (get) 兩個功能,成爲低級容器。
ApplicationContext -- 高級容器,繼承了多個接口,具備多種功能,如 資源獲取,支持多種消息等。
定義了一個refresh 方法,重新刷新Bean。
IOC初始化過程-- 就是 ClassPathXmlApplicationContext 構造過程
CreateParentContext() ----> setParent() ---> refresh() ---> refreshBeanFactory() ---> setEntityResolver()
---->
DI:Dependency Injection 依賴注入
組件之間的依賴關係由容器在運行期間決定,即容器動態的將某個依賴關係注入到組件中,目的是爲了系統重用。
IOC是爲了控制到組件內的各種對象,DI則是動態向某個對象提供它所需要的其他對象通過DI來實現。
DI的基礎實現是java的反射機制。
可以說 DI是spring實現 IOC 模式的實現。