spring之依賴注入與控制反轉的區別
IoC——Inversion of Control 控制反轉
DI——Dependency Injection 依賴注入
要想理解上面兩個概念,就必須搞清楚如下的問題:
- 參與者都有誰?
- 依賴:誰依賴於誰?為什麼需要依賴?
- 注入:誰注入於誰?到底注入什麼?
- 控制反轉:誰控制誰?控制什麼?為何叫反轉(有反轉就應該有正轉了)?
- 依賴注入和控制反轉是同一概念嗎?
下面就來簡要的回答一下上述問題,把這些問題搞明白了,IoC/DI也就明白了。
(1)參與者都有誰:
一般有三方參與者,一個是某個物件;一個是IoC/DI的容器;另一個是某個物件的外部資源。
又要名詞解釋一下,某個物件指的就是任意的、普通的Java物件; 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類中。
用圖例來說明一下,先看沒有IoC/DI的時候,常規的A類使用C類的示意圖,如圖7所示:
圖7 常規A使用C示意圖
當有了IoC/DI的容器後,A類不再主動去建立C了,如圖8所示:
圖8 A類不再主動建立C
而是被動等待,等待IoC/DI的容器獲取一個C的例項,然後反向的注入到A類中,如圖9所示:
圖9 有IoC/DI容器後程序結構示意圖
(9)依賴注入和控制反轉是同一概念嗎?
根據上面的講述,應該能看出來,依賴注入和控制反轉是對同一件事情的不同描述,從某個方面講,就是它們描述的角度不同。依賴注入是從應用程式的角度在描述,可以把依賴注入描述完整點:應用程式依賴容器建立並注入它所需要的外部資源;而控制反轉是從容器的角度在描述,描述完整點:容器控制應用程式,由容器反向的嚮應用程式注入應用程式所需要的外部資源。
(10)小結一下:
其實IoC/DI對程式設計帶來的最大改變不是從程式碼上,而是從思想上,發生了“主從換位”的變化。應用程式原本是老大,要獲取什麼資源都是主動出擊,但是在IoC/DI思想中,應用程式就變成被動的了,被動的等待IoC/DI容器來建立並注入它所需要的資源了。
這麼小小的一個改變其實是程式設計思想的一個大進步,這樣就有效的分離了物件和它所需要的外部資源,使得它們鬆散耦合,有利於功能複用,更重要的是使得程式的整個體系結構變得非常靈活。
相關推薦
spring之依賴注入與控制反轉的區別
IoC——Inversion of Control 控制反轉 DI——Dependency Injection 依賴注入 要想理解上面兩個概念,就必須搞清楚如下的問題: 參與者都有誰?依賴:誰依賴於誰?為什麼需要依賴? 注入:誰注入於誰?到底
也談Spring之依賴注入DI/控制反轉IOC
首先提問, 什麼是 Spring IOC 容器? Spring 框架的核心是 Spring 容器。容器建立物件,將它們裝配在一起,配置它們並管理它們的完整生命週期。Spring 容器使用依賴注入來管理組成應用程式的元件。容器通過讀取提供的配置元資料來接收物件
【Spring】Spring依賴注入與控制反轉理解
Spring是一個龐大的框架,封裝了很多成熟的功能,能夠讓我們無需重複造輪子;其次,它使用IOC進行依賴管理,利用JAVA的反射機制,將例項的初始化交給Spring,Spring可以通過配置檔案管理例項,我們就不用自己初始化例項啦。 有人會問 “那我們可以直接
輕鬆理解-中高階java開發必知必會之 依賴注入和控制反轉
關於Ioc和DI在網上隨便一搜都有很多,但是很多人的講解呢,就是讓人感覺深奧,看多了反而有些摸不清了,下面是我找到的一個利於理解的講解可以看下 Ioc (控制反轉) 首先想說說Ioc(Inversion of Control,控制反轉)。這是spring的核心,貫穿始終。所謂Ioc,對於
通俗易懂的spring的依賴注入(和控制反轉)的講解。
Spring 能有效地組織J2EE應用各層的物件。不管是控制層的Action物件,還是業務層的Service物件,還是持久層的DAO物件,都可在Spring的管理下有機地協調、執行。Spring將各層的物件以鬆耦合的方式組織在一起,Action物件無須關心Service物件的具體實現,Service
laravel 學習筆記:IoC服務容器(依賴注入與控制反轉)
容器,字面上理解就是裝東西的東西。常見的變數、物件屬性等都可以算是容器。一個容器能夠裝什麼,全部取決於你對該容器的定義。當然,有這樣一種容器,它存放的不是文字、數值,而是物件、物件的描述(類、介面)或者是提供物件的回撥,通過這種容器,我們得以實現許多高階的功能
大話DI依賴注入+IOC控制反轉(二) 之 淺析.Net Core中的DI與IOC
在上一篇文章中,我們聊了很多關於定義的方面,比較孤燥,下面我們結合.Net Core聊一下依賴注入&控制反轉。 三種物件生命週期 關於.Net Core中的容
控制反轉IOC的依賴注入方式 【調侃】IOC前世今生 IoC模式 談談對Spring IOC的理解 一個簡單的小程式演示Unity的三種依賴注入方式 小菜學習設計模式(五)—控制反轉(Ioc) IoC模式(依賴、依賴倒置、依賴注入、控制反轉) IoC模式
轉自:https://www.cnblogs.com/ysyn/p/5563256.html 引言: 專案中遇到關於IOC的一些內容,因為和正常的邏輯程式碼比較起來,IOC有點反常。因此本文記錄IOC的一些基礎知識,並附有相應的簡單例項,而在實際專案中再複雜的應用也只是在
大話DI依賴注入+IOC控制反轉(一) 之 定義
原文: 大話DI依賴注入+IOC控制反轉(一) 之 定義 轉發時請註明原創作者及地址,否則追究責任。原創:alunchen 依賴注入與控制反轉 依賴注入與控制反轉是老生常談的問題。一般面試也會面試到這種問題。網上很多很多這方面的資料,搜尋出來一大堆。
Spring -- 依賴注入(控制反轉)
依賴注入 Spring框架的核心功能有兩個: Spring容器作為超級大工廠,負責建立、管理所有的Java物件,這些Java物件被稱為Bean。 Spring容器管理容器中Bean之間的依
spring 依賴注入和控制反轉
Ioc—Inversion of Control,即“控制反轉”,不是什麼技術,而是一種設計思想。在Java開發中,Ioc意味著將你設計好的物件交給容器控制,而不是傳統的在你的物件內部直接控制。如何理解好Ioc呢?理解好Ioc的關鍵是要明確“誰控制誰,控制什麼,為何是反轉
依賴注入和控制反轉的區別
控制反轉:建立物件例項的控制權從程式碼控制剝離到IOC容器控制,實際就是你在xml檔案控制,側重於原理。依賴注入:建立物件例項時,為這個物件注入屬性值或其它物件例項,側重於實現。 依賴注入和控制反轉是同一概念,是對同一件事情的不同描述,它們描述的角度不同。 依賴注入是從應
PHP依賴注入、控制反轉
要想理解 PHP 依賴注入 和 控制反轉 兩個概念,就必須搞清楚如下的兩個問題: DI —— Dependency Injection 依賴注入 IoC —— Inversion of Control 控制反轉 什麼
依賴注入,控制反轉總結
DI(dependency injection)依賴注入模式;依賴注入是指將元件的依賴通過外部以引數或其他形式注入; 再看看 IOC(inversion of control)控制反轉模式;控制反轉是將元件間的依賴關係從程式內部提到外部來管理; 其實兩個說法本質上是一個意思。 不管是依賴
依賴注入和控制反轉
學習過Spring框架的人一定都會聽過Spring的IoC(控制反轉) 、DI(依賴注入)這兩個概念,對於初學Spring的人來說,總覺得IoC 、DI這兩個概念是模糊不清的,是很難理解的,今天和大家分享網上的一些技術大牛們對Spring框架的IOC的理解以及談談我對
依賴注入和控制反轉的理解
學習過Spring框架的人一定都會聽過Spring的IoC(控制反轉) 、DI(依賴注入)這兩個概念,對於初學Spring的人來說,總覺得IoC 、DI這兩個概念是模糊不清的,是很難理解的,今天和大家分享網上的一些技術大牛們對Spring框架的IOC的理解以及談談我對Spri
【AutoFac】依賴注入和控制反轉的使用
在開始之前首先解釋一下我認為的依賴注入和控制反轉的意思。(新手理解,哪裡說得不正確還請指正和見諒) 控制反轉:我們向IOC容器發出獲取一個物件例項的一個請求,IOC容器便把這個物件例項“注入”到我們的手中,在這個時候我們不是一個建立者,我們是以一個請求者的身份去請求容器給我們這個物件例項。我們所有的物件依賴
依賴注入和控制反轉的理解,寫的太好了
學習過Spring框架的人一定都會聽過Spring的IoC(控制反轉) 、DI(依賴注入)這兩個概念,對於初學Spring的人來說,總覺得IoC 、DI這兩個概念是模糊不清的,是很難理解的,今天和大家分享網上的一些技術大牛們對Spring框架的IOC的理解以
.NET Core的依賴注入[1]: 控制反轉
寫在前面:我之前寫過一系列關於.NET Core依賴注入的文章,由於.NET Core依賴注入框架的實現原理髮生了很大的改變,加上我對包括IoC和DI這些理論層面的東西又有了一些新的理解,所以我在此基礎上寫了8篇文章詳細介紹.NET Core的DI。我將這些文章釋出到我的微信公眾賬號(大內老A)下,很多人留言
PHP:依賴注入,控制反轉,依賴倒置原則
判斷程式碼的好壞,我們有自己的標準:高內聚,低耦合。為了解決這一問題,php中有許多優秀的設計模式,比如工廠模式,單例模式。而在程式碼中體現出來的設計模式,就如依賴注入和控制反轉。那什麼是依賴注入?簡單來說,就是把A類所依賴的B類C類等以屬性或者建構函式等方式注入A類而不是直