1. 程式人生 > >spring之依賴注入與控制反轉的區別

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 容器使用依賴注入來管理組成應用程式的元件。容器通過讀取提供的配置元資料來接收物件

SpringSpring依賴注入控制反轉理解

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中的DIIOC

      在上一篇文章中,我們聊了很多關於定義的方面,比較孤燥,下面我們結合.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類而不是直