1. 程式人生 > >Spring學習(三)IOC控制反轉與DI依賴注入

Spring學習(三)IOC控制反轉與DI依賴注入

IOC(Inversion of Control,控制反轉)是spring的核心,貫穿始終。 所謂IOC,對於spring框架來說,就是由spring來負責控制物件的生命週期和物件間的關係:
  • 傳統開發模式:物件之間互相依賴
  • IOC開發模式:IOC容器安排物件之間的依賴
Spring所倡導的開發方式就是:所有的類都會在Spring容器當中登記,告訴Spring你是一個什麼東西,你需要什麼東西。 然後Spring會在系統執行到適當的時候把你所需要的東西主動送給你。 同時,也把你交給其他需要你的東西。 所有類的建立、銷燬都由Spring控制。 也就是說:控制物件生存週期的不在是引用他的物件而是Spring。
對於某個具體的物件而言:以前是他控制其他物件,現在是所有的物件都被Spring所控制。 所以這就叫控制反轉 接下來我們介紹以下IOC的理論背景 我們先來觀察幾張圖:
圖1:耦合的物件
圖2:解耦的過程
圖3:理想的系統 我們可以看到在軟體系統在沒有引入IOC容器之前就像圖1所示,物件A依賴與物件B,那麼物件A在初始化或者執行到某一點的時候,自己必須主動的去建立物件B,或者是使用已經建立的物件B。無論是建立還是使用物件B,控制權全都在自己手上。 在軟體系統引入了IOC容器之後,這種情景就完全改變了。 那麼如圖2所示,由於IOC容器的加入,物件A和物件B之間失去了直接的聯絡。所以當物件A執行到了需要物件B 的時候,IOC容器會主動地建立一個物件B注入到物件A所需要的地方。
那麼,通過前後的對比,我們不難看出:物件A獲得物件 B的過程由主動行為變成了被動行為。控制權顛倒過來了,這就是控制反轉。這就是其名稱的由來。 而圖3則是我們在開發過程中所期望看到的理想的系統。 既然IOC是控制反轉,那麼到底是哪些方面的控制被反轉了呢? 獲得依賴物件的過程被反轉了。 控制被反轉之後,獲得依賴物件的過程由自身的管理變為了由IOC容器主動的注入。 於是,控制反轉便有了一個更合適的名字,叫做:依賴注入(DI) IOC的另外的名字叫做依賴注入(Dependency Injection),所謂的依賴注入,就是由IOC容器在執行期間,動態地將某種依賴關係注入到物件之中。所以,依賴注入(DI)
控制反轉(IOC)是從不同的角度的描述的同一件事情,就是指通過引入IOC容器,利用依賴關係注入的方式,實現物件之間的解耦。
我們來舉一個生活當中常見的例子來解釋下什麼是依賴注入:
大家對USB裝置和USB介面應該都很熟悉,USB為我們使用電腦提供了很大的方便。現在有很多的外部裝置都支援USB裝置。 現在我們利用主機介面和USB裝置來實現一個任務:從我們的USB設定讀取一個檔案 電腦主機讀取檔案時他一點也不關心電腦主機上連線的是什麼裝置,而且他確實也沒有必要知道。他的任務就是讀取USB介面,掛接的裝置只要符合USB介面的標準就可以了。所以我給電腦主機連線上一個U盤,那麼主機就從U盤上讀取檔案。那麼我給主機連線上一個外接硬碟,那麼電腦便從外接硬碟上讀取檔案。掛接外部裝置的權利來由我做主,即控制權是歸我的。至於USB介面掛接的是什麼裝置電腦主機是決定不了的,他只能被動的接收。當電腦主機需要外部裝置時根本不用他告訴我,我會主動的為他掛接上他所需要的外部裝置。 這就是我們生活當中常見的一個依賴注入的例子。在整個過程中,我就起到了一個IOC容器的作用。 通過這個例子,依賴注入的思路就已經非常清楚了: 當電腦主機讀取檔案的時候,我就將他所要依賴的外部裝置幫他掛接上。整個外部設備註入的過程和一個被依賴的物件在系統執行是被注入到另一個物件內部的過程是完全一樣的。 我們把依賴注入應用到軟體系統當中再來描述一下這個過程是什麼樣子的: 物件A依賴與物件B,那麼當物件A需要用到物件B 的時候,IOC容器就會立即的建立一個物件B送給物件A。 IOC的容器就是一個物件製造工程,你需要什麼,他就會傳送給你,你直接使用就可以了。再也不用關心你所需要的東西是如何製成的,也不用關心最後是怎麼被銷燬的。這一切都全部由IOC容器來包辦,在傳統的實現中由程式內部程式碼來控制組件之間的關係,我們經常使用new關鍵字來實現兩個元件之間關係的組合,這種實現方式會造成元件之間耦合。IOC很好的解決了這種問題,他將實現元件間到的關係由程式內部提煉到了程式外部。也就是說由容器在執行期間將元件間的某種依賴關係動態的注入到元件當中。 那麼IOC到底給我們的編碼過程中帶來了什麼樣的好處呢? IOC在程式設計過程中不會對業務物件構成很強的侵入性, 使用IOC之後,物件具有更好的可實行性,可重用性和可擴充套件性:
  • 降低元件之間的耦合度
  • 提高開發效率和產品質量
  • 統一標準,提高模組的複用性
  • 模組具有熱插拔特性
總結: IOC的通俗理解如下: •    IOC(控制反轉):說的是建立物件例項的控制權從程式碼控制剝離到IOC容器控制,實際就是你在xml檔案控制,側重於原理 •    DI(依賴注入):說的是建立物件例項時,為這個物件注入屬性值或其它物件例項,側重於實現

相關推薦

Spring學習IOC控制反轉DI依賴注入

IOC(Inversion of Control,控制反轉)是spring的核心,貫穿始終。 所謂IOC,對於spring框架來說,就是由spring來負責控制物件的生命週期和物件間的關係: 傳統開發

Spring中的IOC(控制反轉)DI(依賴注入)理解由淺入深-適用於小白

IOC(Inversion of Control )與 DI(Dependency injection)是sping的主要思想,不是技術! IOC控制反轉:一般我們在一個類中呼叫其它的類(非靜態類),需要新建一個該類的例項或者從其他途徑獲取該類的例項,然後對通過該例項進行操

Spring學習1控制反轉IoC依賴注入DI的詳解以及註解annotation開發入門案例

前言 以往的java學習中,我們要想得到一個物件,就把它new出來。如:Apple apple = new Apple(); 在一些複雜的系統中,一個物件A可能依賴於物件B,C等(程式碼表現為A類持有B,C類的物件作為A類的屬性)。以往來說,我們想要使用B,

Spring_第二章【核心控制器過SpringIoC(控制反轉) 、DI(依賴注入)】

1:什麼是核心控制器 1.1:spring框架主要分為核心容器(Core Container) 核心容器由spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spr

SpringIoC(控制反轉) 、DI(依賴注入)(轉載)

轉自:https://www.cnblogs.com/xdp-gacl/p/4249939.html   學習過Spring框架的人一定都會聽過Spring的IoC(控制反轉) 、DI(依賴注入)這兩個概念,對於初學Spring的人來說,總覺得IoC 、DI這兩個概念是模糊不清的,

如何理解spring中的IOC(控制反轉)、DI(依賴注入)?

如何理解IOC(控制反轉)和DI(依賴注入) ioc是什麼? Ioc—Inversion of Control,即“控制反轉”,不是什麼技術,而是一種設計思想。在Java開發中,Ioc意味著將你設計好的物件交給容器控制,而不是傳統的在你的物件內部直接控制。如

Spring框架中IOC控制反轉DI依賴注入區別

IOC控制反轉:說的是建立物件例項的控制權從程式碼控制剝離到IOC容器控制,實際就是你在xml檔案控制,側重於原理。 DI依賴注入:說的是建立物件例項時,為這個物件注入屬性值或其它物件例項,側重於實現。 它們是spring核心思想的不同方面的描述。 DI 和 IO

IoC控制反轉DI依賴輸入

IoC (Inversion of Control)即控制反轉,是面向物件程式設計中的一種設計原則。它把傳統上由程式程式碼直接操控的物件的呼叫權交給容器,通過外部容器來實現物件元件的裝配和管理。 簡單來說,所謂的“控制反轉”概念就是對元件物件控制權的轉移,從程式程式碼本身轉移到了外部容器。  

IoC(控制反轉) 和DI(依賴注入)

首先:第一個問題,參與者都有誰? 1)物件 2)IOC/DI容器 3)某個物件的外部資源第二問題:依賴,誰依賴誰?為什麼需要依賴? 依賴嘛,很好理解的,物件依賴於IOC/DI容器,至於為什麼要依賴呢?物件需要IOC/DI容器來提供物件需要的外部資源。第三個問題:注入,誰注入

什麼是IOC(控制反轉)、DI(依賴注入)

學習過Spring框架的人一定都會聽過Spring的IoC(控制反轉) 、DI(依賴注入)這兩個概念,對於初學Spring的人來說,總覺得IoC 、DI這兩個概念是模糊不清的,是很難理解的,今天和大家分享網上的一些技術大牛們對Spring框架的IOC的理解以及談談我對Spri

Spring詳解------IOC控制反轉

tsp name 調試 的人 好的 turn 同時 eth 時機   我相信提到 Spring,很多人會脫口而出IOC(控制反轉)、DI(依賴註入)、AOP等等概念,這些概念也是面試官經常問到的知識點。那麽這篇博客我們就來詳細的講解 IOC控制反轉。   ps:本篇博客源

spring深入學習IOC 之 載入 Bean

先看一段熟悉的程式碼: ClassPathResource resource = new ClassPathResource("bean.xml"); DefaultListableBeanFactory factory = new DefaultListableBeanF

Spring學習4IOC容器配置bean:定義實例化

dimp 工廠類 def 流程 行為 更多 多個 scrip 編譯報錯 一. IOC容器配置   1. 一些概念   (1)IOC容器:   定義:具有管理對象和管理對象之間的依賴關系的容器。   作用:應用程序無需自己創建對象,對象由IOC容器創建並組裝。BeanFac

新手學習Spring IOC控制反轉DI依賴轉入總結

except 堅持 this 控制 .get set style ava 文件 30歲的小曹,20歲的身體,還在堅持在能力允許控制範圍內22點睡覺,5點起床鍛煉身體,好好學習,除了加班或者像今天這樣的深夜,再一次寫已經有X百萬人寫過的 spring Ioc 的總結博客。 一

Spring42——IOC控制反轉 概念理解

控制 引用 接口 java的反射機制 test 法則 imp 基礎上 ava 1.IOC控制反轉的概念 IOC(控制反轉:Inverse of Control ),又稱作 依賴註入,是一種重要的面向對象編程的法則來削減計算機程序的耦合問題,也是輕量級的 Spring 框架的

Spring學習| Spring AOP

文章目錄 1. 什麼是 AOP ? 2. 為什麼需要使用 AOP ? 3. AOP 術語 4. 在 Spring 中使用 Aspect 註解方式進行切面程式設計 4.1 在 Spring 中啟用 AspectJ 註解支援 4.2

Spring43——IOC控制反轉

1.Spring裝配一個bean 在前一章中已涉及到此知識點,通俗的來講:在建立People實體之後,在beans.xml 中配置,然後在實現類中呼叫 beans.xml檔案,即裝配完成,呼叫預設的構造方法。 建立實體 (People.java) 類 publi

Spring 學習——IOC 容器中 Bean 的生命週期

IOC 容器中 Bean 的生命週期方法 •Spring IOC 容器可以管理 Bean 的生命週期, Spring 允許在 Bean 生命週期的特定點執行定製的任務. •Spring IOC 容器對 Bean 的生命週期進行管理的過程: –通過構造器或工廠方法建立 Bean 例項

Spring 學習——Spring 中的 Bean 配置

配置形式:基於 XML 檔案的方式;基於註解的方式 Bean 的配置方式:通過全類名(反射)、通過工廠方法(靜態工廠方法 & 例項工廠方法)、FactoryBean IOC 容器 BeanFactory & ApplicationContext 概述 依賴注入

Spring學習

(一)Spring基於AspectJ的註解的AOP開發 (1)建立專案 引入jar包 編寫目標類,切面類,在Spring中進行bean配置 (2)在配置檔案中開啟註解的AOP開發 (3)切面類AOP配置 注意要在類上打Aspect註解 前置通知 後置通知