1. 程式人生 > >淺談 SpringIOC/DI

淺談 SpringIOC/DI

簡單理解SpringIOC和DI

用過spring一定知道spring的IOC(控制反轉)、DI(依賴注入)。這是兩個很重要的概念,我稍微來寫寫自己的理解。

1.SpringIOC

1.1 IOC是什麼

IOC(Inversion of Control)就是“控制反轉”,它不是一種技術,而是一種設計思想。在spring中,使用IOC則意味著將設計好的物件交給IOC容器控制,而不是像傳統的方式由我們來在物件內部控制。

理解IOC那就要理解兩個方面:“誰控制誰,控制了什麼”、“為什麼是反轉,什麼東西反轉了”。

誰控制誰,控制了什麼”:在傳統的JavaSE程式中,我們往往直接在物件內部通過new來進行物件的建立,這就是由程式主動建立依賴物件;而IOC則是專門有一個容器來建立這些物件,即用IOC容器來控制物件的建立。
容器控制了物件,控制了外部資源獲取。

為什麼是反轉,什麼東西反轉了”:在傳統程式中,我們是自己在物件中建立並獲取依賴物件的。而在IOC中則是由容器來幫我們建立並注入以來物件。
原本主動建立並依賴的物件變為由容器幫我們查詢建立並注入物件,物件只是被動的接受了依賴物件,所以是反轉;依賴物件的建立和獲取方式反轉了。

1.2 IOC能幹什麼

傳統應用程式中都是由我們主動在類內部建立依賴物件,使得類與類之間高度耦合,難於維護;當有了IOC容器之後,把建立和查詢依賴物件的控制權交給了容器,由容器進行組合,降低了耦合度且易於維護,使得程式整體結構變得很靈活。
IOC帶來的最大的改變是思想上的,原本,獲取所有資源都要主動的去獲取去查詢,但在IOC中,則變成了被動的等待IOC容器建立並注入所需要的資源。
IOC很好的體現了“好萊塢法則(don‘t call us, we‘ll call you)

”,即IOC容器幫物件找相應的依賴物件並注入,而不是由物件主動去查詢。

2.DI

什麼是DI

DI(Dependency Injection)就是“依賴注入”。元件之間依賴關係由容器在執行期間決定,即容器動態的將某個依賴關係注入到元件之中。
理解DI也要從兩方面去理解:“誰依賴誰,為什麼要依賴”、“誰注入誰,注入了什麼”。
誰依賴誰,為什麼要依賴”:應用程式依賴於IOC容器,因為需要IOC容器來提供物件需要的外部資源。
誰注入誰,注入了什麼”:將IOC容器注入應用程式的某個物件,注入了某個物件所需要的外部資源。

Spring還有一個比較重要的內容就是SpringAOP,AOP其實也是IOC的一種實現,依賴於IOC容器進行管理相關的物件以更好的實現AOP。

相關推薦

SpringIOC/DI

簡單理解SpringIOC和DI 用過spring一定知道spring的IOC(控制反轉)、DI(依賴注入)。這是兩個很重要的概念,我稍微來寫寫自己的理解。 1.SpringIOC 1.1 IOC是什麼 IOC(Inversion of Contro

Spring框架,自動注入物件IoC/DI的過程(二)

在上一篇部落格中,我已經寫到怎麼用自動注入的物件了。可能我說的不是太清楚,有些朋友還不是很明白,那麼這次我們結合service層呼叫DAO層的方法,再詳細說說怎麼隨心所欲的使用物件。 先看一下程式碼:

AngularJS DI-依賴注入 $injector的神奇之處

前言 依賴注入(DI)和控制反轉(IOC)都是java Spring裡經典的面向物件程式設計的法則來削減計算機程式的耦合問題的解決方案。 在Angular中,引入了DI的思想,DI是一種工具思想,而不是一種目的,它的目的是為了降低程式程式碼之間的耦合。

ASP.NET Core中IOC與DI的理解和使用

說起IOC和DI,使用過ASP.NET Core的人對這兩個概念一定不陌生,早前,自己也有嘗試過去了解這兩個東西,但是一直覺得有點很難去理解,總覺得對其還是模糊不清,所以,趁著今天有空,就去把兩個概念捋清楚,並將學習過程的知識點記錄下來。  一、IOC和DI的理解 1.1 什麼是IOC?

ASP.NET Core中的DI

# DI的一些事 傳送門[馬丁大叔的文章](https://martinfowler.com/articles/injection.html#InversionOfControl) ## 什麼是依賴注入(DI: Dependency Injection)?     依賴注入(DI)是一種面向物件的軟體

計算機領域及職業憧憬

計算機科學 軟件工程師 計算機行業 雖然自己的專業是計算機,可是慚愧的說其實對這個行業的了解並不是很多,大多時候是通過網絡或者新聞才了解到的。據我所知,現在計算機行業是非常流行的行業,當然競爭也是十分激烈,信息化的時代我們的生活都離不開與計算機有關的東西,比如上學坐公共汽車,需要刷卡,這就是

Java學習筆記——數據結構與Java集合框架(第一篇、List)

技術分享 emp 鏈表 adc 下標 -c nod nal integer 橫看成嶺側成峰,遠近高低各不同。不識廬山真面目,只緣身在此山中。               ——蘇軾 這一塊兒學的是雲裏霧裏,咱們先從簡單的入手。逐漸的撥開迷霧見太陽。本次先做List集合的三

HTTP請求與響應

tcp 方法 刪除 請求 連接 客戶機 cin tex 文件 HTTP協議用於客戶端和服務器之間的通信,請求訪問的一段是客戶端,提供資源響應的一段是服務器端。 HTTP通信是采用請求應答的方式來進行的,客戶端發出請求,服務器響應。如果沒有客戶端的請求,服務器端是不進行任

C#解析網頁

多說 .text 了解 light path text load 所有 web 最近做了一個項目,要求獲取各大主流網頁上的關鍵信息,本人以前了解過網頁爬蟲的知識,所以想到了網頁爬蟲了實現功能 第一次嘗試: 采用webclient獲取遠程網頁的內容,然後采用正則表達式進行過濾

三層

數據交換 接受 數據庫 業務 傳輸數據 文本文 項目結構 三層架構 project 三層劃分 三層架構通常意義上就是將整個業務劃分為:表現層(UI),業務邏輯層(BLL),數據訪問層(DAL)。三層並非.net 的專利,而是一個廣譜的框架設計思想,根本上是為了解決高

io流

public 文件夾 parent 文章 IO流淺談 在這篇文章裏,我會分別和大家聊字節流和字符流 一字節流 File File:文件和目錄(文件夾)路徑名的抽象表示形式。 File的構造方法: File(String pathname):把一個路徑名稱封裝成F

【轉】一個網頁打開的全過程(涉及DNS、CDN、Nginx負載均衡等)

位置 filters 產生 多種方法 tps windows cnblogs 這就是 廣東 1、概要   從用戶在瀏覽器輸入域名開始,到web頁面加載完畢,這是一個說復雜不復雜,說簡單不簡單的過程,下文暫且把這個過程稱作網頁加載過程。下面我將依靠自己的經驗,總結一下整個過程

Qt之二十一log調試日誌

gms 生成文件 _file__ ica 沒有 rest delet mar 排除 一、簡單介紹 近期因調試code時,想了解程序的流程,但苦於沒有一個簡易的日誌記錄,不停使用qDebug打印輸出,而終於提交代碼時得去多次刪除信息打印,有時還會出現新改動

C# if判斷

else if mic 要求 用戶輸入 if判斷 span 常用 switch 數字 目前學習了C#中很多語句: if判斷 switch選擇 while循環 do while循環 for循環 foreach循環 它們是C#中經常用到的一些語句。 if判斷:

mmap()和ioremap()的用法與區別

12只 設備 gpa 我們 之間 mmap ioremap shared set 一、mmap()mmap()函數是用來將設備內存線性地址映射到用戶地址空間。(1)首先映射基地址,再通過偏移地址尋址;(2)unsigned char *map_cru_base=(unsig

NIO原理剖析與Netty初步----高性能服務器開發(一)

返回 創建 基於 register 訪問 io操作 nbsp info class 除特別註明外,本站所有文章均為原創,轉載請註明地址 在博主不長的工作經歷中,NIO用的並不多,由於使用原生的Java NIO編程的復雜性,大多數時候我們會選擇Netty,m

反射入門-反射用途_根據Ado遊標對象創建list集合

cep exists _id tostring ogr param char typeof scala 本人大二菜鳥一只,今天在上課期間有個同學看著C#反射的內容說反射沒什麽用,一時之間也想不到什麽更好的例子,就寫了個根據泛型類型和遊標反射創建List集合的Demo. 首先

老司機linux系統學習技巧

windowsLinux起源於20世紀70年代,是一種優秀的操作系統系統。初次接觸到linux這個系統是在大學期間,這樣才發現除了windows外的另外一個有趣系統。開始抱著好奇的心態去了解,隨著深入學習,筆者被它獨有的魅力所吸引。即使它的可視化窗口操作模式並不如Windows操作系統那樣完美,可是它的可維護

awk命令

log 次數 循環 alfred 數值 字符串 int 所有 進行 簡介 awk是一個強大的文本分析工具,相對於grep、sed命令,awk在其對數據分析並生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,然後將每行切片,再對切開的部分進行處理。 awk有3個不

軟件銷售工作

級別 區分 eas 沒有 這樣的 呵呵 萬塊 div 最好 自技術領域轉做銷售有幾年了。由於長期耕耘在技術領域,對於銷售的角色進入有點晚,只是近期幾年也逐漸的摸出些門道,而且按照這些門道來指導團隊的實踐,確實可以看到比較可喜的進步,在此總結一下。跟大家一起分享一下。銷售分