**
ioc
ioc理論的背景
依賴注入
(di)
ioc的好處
ioc的通俗理解 **
ioc
ioc(inversionof control,
控制反轉)是
spring
的核心,貫穿始終。所謂
ioc,對於
spring
框架來說,就是由
spring
來負責控制物件的生命週期和物件的關係:
傳統開發模式:物件之間相互依賴
(如自己找女朋友)
ioc開發模式:
ioc容器安排物件之間的依賴
(如婚介,會按照要求給你提供)
所有的類都會在
spring
容器中登記,告訴
spring"你"
是什麼,需要什麼,
spring
會在系統執行到適當時主動提供所需要的東西,同時把"你
"交給需要你的東西,所有類的建立、銷毀都由
spring
來控制,也就是說控制物件生存週期的,不再是引用它的物件,而是
spring
。對於某個具體的物件而言,以前是它控制其它物件,現在,是所有物件都被
spring
控制,所以叫
控制反轉
ioc理論的背景
多個齒輪耦合在一起共同完成某項任務,如果有乙個齒輪出現問題,就可能會影響整個系統的運轉。齒輪組齒輪之間的耦合關係與軟體系統中物件之間的耦合關係相似,物件之間的耦合關係是無法避免的
,也是必要的,這是協同工作的基礎。現在伴隨著工業級規模越來越龐大,物件之間的依賴關係也越來越複雜,經常會出現物件之間的多重依賴關係,因此架構師和設計師對系統的分析和設計將面臨著更大的挑戰,物件之間耦合度過高的系統,必然會出現牽一髮而動全身的情形,如何降低
系統之間、模組之間
和物件之間的耦合度是軟體工程永遠追求的目標之一,為了解決物件之間耦合度過高的問題,
ioc被提出,用來實現物件之間的解耦
ioc的處理方式簡單來說就是把複雜的系統分解成相互合作的物件,這些物件類通過封裝以後內部實現對於外部是透明的,從而降低了解決問題的複雜度,而且可以被靈活的被重用和擴充套件;借助於第三方來實現對具有依賴關係物件關係之間的解耦
(控制權上交給了第三方
ioc容器
,起到了類似粘合劑的作用,把系統中的所有物件粘合在一起發揮作用,這就是
ioc容器被稱作粘合劑的由來)
物件之間的依賴關係降低到了最低,參與開發的每個成員,只需要實現自己的類就行了
為什麼叫控制反轉
軟體系統沒有引入
ioc容器之前,如圖
1 object:a
依賴於objectb, object:a
在進行初始化或執行到某一點時,自己必須生動地建立物件
b,或者使用已經建立的
object:b
,無論是建立還是使用
object:b
,控制權依然在自己手中 引入
ioc容器之後,如圖
2 object:a
和objectb
失去了直接的聯絡,所以但執行到
object:a
需要object:b
時ioc
容器會主動地建立乙個物件
b注入到
object:a
所需要的地方
不難看出,
objecta
獲得依賴
objectb
的過程由主動行為變成了被動行為,控制權顛倒了,這就是控制反轉名稱的由來。
依賴注入(di)
ioc的另外的名字叫做注入依賴
(dependency injection),
所謂的注入依賴,就是
由ioc
容器在執行期間,動態地將某種依賴關係注入到物件之中
。所以依賴注入
(di)
和控制反轉
(ioc)
是從不同角度的描述同一件事情
,就是指通過引入
ioc容器,利用依賴關係注入的方式,實現物件之間的解耦
ioc的好處
ioc的通俗理解
ioc控制反**說的是建立物件例項的控制權從**控制剝離到
ioc容器控制,實際就是你在
xml檔案控制,側重於原理 di
依賴注入:說的是建立物件例項時,為這個物件注入屬性值或其他物件例項,側重於實現
Spring學習筆記 IoC
getbean 方法 引數為class時要保證配置檔案中bean唯一 構造器注入 通過constructor arg節點注入 工廠方法注入 很少使用 繼承 通過在bean中新增屬性parent指定繼承的父bean,也可以忽略父 bean 的 class 屬性,此時 abstract屬性 必須設為 t...
Spring學習筆記(一) IoC之DI
spring的乙個核心概念就是ioc,所謂ioc,即inversion of control,中文譯為控制反轉。其核心思想即高層模組要依賴於抽象,而不是依賴於底層模組,換句話說,也就是實現必需依賴於抽象,而不是抽象依賴於實現。這裡所說的高層模組是指與業務相聯絡的模組。而低層模組是指與底層實現相聯絡的...
spring學習之IoC容器
jinnianshilongnian 寫道 理解ioc容器問題關鍵 控制的哪些方面被反轉了?1 誰控制誰?為什麼叫反轉?ioc容器控制,而以前是應用程式控制,所以叫反轉 2 控制什麼?控制應用程式所需要的資源 物件 檔案 3 為什麼控制?解耦元件之間的關係 4 控制的哪些方面被反轉了?程式的控制權發...