在這以前,咱們先記住一句話。好萊塢原則:Don’t call me, we will call you. 即「不用打電話過來,咱們會打給你
」。編程
控制反轉(Inversion of Control
,簡稱IoC
),是面向對象編程中的一種設計原則,能夠用來減低計算機代碼之間的耦合度。其中最多見的方式叫作依賴注入(Dependency Injection
,簡稱DI
),還有一種方式叫「依賴查找」(Dependency Lookup
)。經過控制反轉,對象在被建立的時候,由一個調控系統內全部對象的外界實體,將其所依賴的對象的引用傳遞(注入)給它。segmentfault
兩種實現: 依賴查找(DL)和依賴注入(DI)。緩存
IOC 和 DI 、DL 的關係:spa
Dependency Injection
) 是 Spring 使用的方式,容器負責組件的裝配。Dependency Lookup
)已經被拋棄。IOC容器其實就是一個大工廠,它用來管理咱們全部的對象以及依賴關係。設計
咱們簡單來看看實際Spring IOC容器是怎麼實現對象的建立和依賴的:code
Spring容器(Bean工廠)可簡單分紅兩種:xml
BeanFactory對象
ApplicationContextblog
沒有特殊要求的狀況下,應該使用ApplicationContext完成。由於BeanFactory能完成的事情,ApplicationContext都能完成,而且提供了更多接近如今開發的功能。
首先,IOC控制反轉 生命週期
誰控制誰,控制什麼,什麼是反轉(有反轉就應該有正轉了)
誰控制誰,控制什麼:
誰控制誰?
固然是IOC容器控制了對象;控制什麼?
那就是主要控制了外部資源獲取(不僅是對象還包括好比文件等)。所謂反轉:
Spring
來控制對象的生命週期,那麼對象的控制就徹底脫離了咱們的控制,控制權交給了Spring
。這個反轉是指:咱們由對象的控制者變成了 IOC
的被動控制者。其次,說到IOC
就會想到DI 依賴注入
(IOC 是經過DI來實現的),那麼:
誰依賴誰,爲何須要依賴;誰注入誰,注入了什麼
好處: 下降了開發的成本,提升了代碼複用率、軟件的靈活性。
IOC:不是什麼技術,而是一種設計思想。在 Spring
開發中,由 IOC
容器控制對象的建立、初始化、銷燬等。這也就實現了對象控制權的反轉,由咱們對對象的控制轉變成了Spring IOC
對對象的控制。
DI:是 IOC
的具體實現。程序把依賴交給容器,容器幫你管理依賴。