ioc:inversion of control,控制反轉;
di:dependency injection,依賴注入;
要理解這兩個概念,首先要搞清楚以下幾個問題:
1. 參與者都有誰?
2. 依賴:誰依賴於誰?為什麼需要依賴?
3. 注入:誰注入於誰?到底注入什麼?
4. 控制反**誰控制誰?控制什麼?為何叫反轉(有反轉是否應該有正傳?)
5. 依賴注入和控制反轉是同一概念嗎?
下面就來簡要的回答下上述問題,把這些搞明白了,ioc/di也就明白了。
(1)參與者都有誰:
一般有三方參與者,乙個是某個物件;乙個是ioc/di的容器;另乙個是某個物件的外部資源。某個
物件就是任意的、普通的物件;ioc/di的容器簡單點說就是指用來實現ioc/di功能的乙個框架程式;
物件的外部資源指的就是對像所需要的,但是是從外部獲取的,都統稱資源。比如:物件需要的其它
物件、或者物件所需要的檔案資源等等。
(2)誰依賴於誰:
當然是某個物件依賴於ioc/di的容器
(3)為什麼需要依賴:
物件需要ioc/di的容器來提供物件需要的外部資源
(4)誰注入於誰:
很明顯是ioc/di的容器注入某個物件
(5)到底注入什麼:
就是注入某個物件所需要的外部資源
(6)誰控制誰:
當然是ioc/di的容器來控制物件了
(7)控制什麼:
主要是控制物件例項的建立
(8)為何叫反**
反轉是相對於正向而言的,那麼什麼算是正向的呢?考慮一下常規情況下的應用程式,如果要在a裡面使用c,你會怎麼做呢?當然是直接去建立c的物件,也就是說,是在a類中主動去獲取所需要的外部資源c,這種情況被稱為正向的。那麼什麼是反向呢?就是a類不再主動去獲取c,而是被動等待,等待ioc/di的容器獲取乙個c的例項,然後反向的注入到a類中。
(9)依賴注入和控制反轉是同一概念嗎?
根據上面的講述,應該能看出來,依賴注入和控制反轉是對同一件事情的不同描述,從某個方面講,就是它們描述的角度不同。依賴注入是從應用程式的角度在描述,可以把依賴注入描述完整點:應用程式依賴容器建立並注入它所需要的外部資源;而控制反轉是從容器的角度在描述,描述完整點:容器控制應用程式,由容器反向的向應用程式注入應用程式所需要的外部資源。
(10)小結一下:
其實ioc/di對程式設計帶來的最大改變不是從**上,而是從思想上,發生了「主從換位」的變化。應用程式原本是老大,要獲取什麼資源都是主動出擊,但是在ioc/di思想中,應用程式就變成被動的了,被動的等待ioc/di容器來建立並注入它所需要的資源了。
小小的乙個改變其實是程式設計思想的乙個大進步,這樣就有效的分離了物件和它所需要的外部資源,使得它們鬆散耦合,有利於功能復用,更重要的是使得程式的整個體系結構變得非常靈活
Spring框架介紹 l了解控制反轉依賴注入
spring是乙個輕量級框架。它可以被認為是乙個框架的框架,因為它支援各種框架,如struts hibernate tapestry ejb jsf等。從更廣泛的意義上說,框架可以定義為乙個我們可以找到各種技術問題解決方案的結構。讓我們先了解ioc和依賴注入。控制反轉 ioc 和依賴注入 控制反轉 ...
輕鬆了解Spring中的控制反轉和依賴注入
在介面中定義要注入的資訊,並通過介面來完成注入。spring不支援這種注入方式 不支援的原因是 spring聲稱其是非入侵式的 離開這個框架也能活 如果使用介面注入的話,就違背了這一原則 這裡不做 實現講解。我們先脫離spring來實現setter注入,分兩步,第一步我們先看看在常規的做法下類之間的...
spring中控制反轉和依賴注入
spring框架是乙個控制反轉和面向切面的開源框架,主要作用是簡化企業應用開發。一提到spring,大家都會想到控制反轉和依賴注入的概念,關於這兩個概念有很多的解釋。控制反轉就是應用本身不負責依賴物件的建立和維護,依賴物件的建立和維護由外部容器負責,這樣控制權由原先的應用本身轉移到了容器,控制權發生...