對Spring 控制反轉和依賴注入的理解

2022-09-14 03:21:11 字數 1388 閱讀 8997

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,大家都會想到控制反轉和依賴注入的概念,關於這兩個概念有很多的解釋。控制反轉就是應用本身不負責依賴物件的建立和維護,依賴物件的建立和維護由外部容器負責,這樣控制權由原先的應用本身轉移到了容器,控制權發生...