日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

2012 依赖注入框架

發(fā)布時(shí)間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2012 依赖注入框架 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

以下內(nèi)容來自維基百科的控制反轉(zhuǎn)詞條

控制反轉(zhuǎn)(英語(yǔ):Inversion of control,縮寫為IoC),也叫做依賴注入Dependency Injection,簡(jiǎn)稱DI),是面向?qū)ο缶幊讨械囊环N設(shè)計(jì)原則,可以用來減低計(jì)算機(jī)代碼之間的耦合度。

?

起源

早在2004年,Martin Fowler就提出了“哪些方面的控制被反轉(zhuǎn)了?”這個(gè)問題。他總結(jié)出是依賴對(duì)象的獲得被反轉(zhuǎn)了?;谶@個(gè)結(jié)論,他為控制反轉(zhuǎn)創(chuàng)造了一個(gè)更好的名字:依賴注入。許多非凡的應(yīng)用(比HelloWorld.java更加優(yōu)美,更加復(fù)雜)都是由兩個(gè)或是更多的類通過彼此的合作來實(shí)現(xiàn)業(yè)務(wù)邏輯,這使得每個(gè)對(duì)象都需要,與其合作的對(duì)象(也就是它所依賴的對(duì)象)的引用。如果這個(gè)獲取過程要靠自身實(shí)現(xiàn),那么如你所見,這將導(dǎo)致代碼高度耦合并且難以測(cè)試。

IoC 亦稱為 “依賴倒置原理”("Dependency Inversion Principle") (Martin 2002:127)。差不多所有框架都使用了“倒置注入(Fowler 2004)技巧,這可說是IoC原理的一項(xiàng)應(yīng)用。SmallTalk,C++, Java 或各種.NET 語(yǔ)言等面向?qū)ο蟪绦蛘Z(yǔ)言的程序員已使用了這些原理。

控制反轉(zhuǎn)是Spring Framework的核心。

應(yīng)用控制反轉(zhuǎn),對(duì)象在被創(chuàng)建的時(shí)候,由一個(gè)調(diào)控系統(tǒng)內(nèi)所有對(duì)象的外界實(shí)體,將其所依賴的對(duì)象的引用,傳遞給它。也可以說,依賴被注入到對(duì)象中。所以,控制反轉(zhuǎn)是,關(guān)于一個(gè)對(duì)象如何獲取它所依賴的對(duì)象的引用,這個(gè)責(zé)任的反轉(zhuǎn)

技術(shù)性說明

術(shù)語(yǔ)

Class X 依賴于 class Y 只在如下狀況中成立:

  • X 擁有 Y 的控制并且在 X 中使用 Y
  • X 是 Y 的派生物
  • X 依賴于 Z,而 Z 又依賴于 Y (transitivity)

X 依賴于 Y 并不表示 Y 也依賴于 X。但如果 X 和 Y 同時(shí)依賴于對(duì)方,這種依賴性被稱作 循環(huán)依賴:這時(shí),X 無法和 Y 分開單獨(dú)使用,反之亦然。如果在一個(gè)面對(duì)對(duì)象程式中擁有太多的循環(huán)依賴,這可能表示這個(gè)程式是個(gè)欠佳的設(shè)計(jì)。

打破依賴

如果類X的一個(gè)實(shí)例對(duì)象x調(diào)用了類Y的一個(gè)實(shí)例對(duì)象y的方法,那么就稱類X依賴于類Y。為了打破這種依賴——“反轉(zhuǎn)”,首先我們可以引入一個(gè)接口I(第三方類),接口I中聲明了對(duì)象y將被對(duì)象x調(diào)用的所有方法;然后,我們對(duì)類Y稍加改造,使其實(shí)現(xiàn)接口I;最后,我們把在對(duì)象x中對(duì)y的調(diào)用改為對(duì)接口I中對(duì)應(yīng)方法的調(diào)用。經(jīng)過這番改造后,原先的X對(duì)Y的依賴關(guān)系不存在了,類X和Y現(xiàn)在都依賴于接口I。

這種通過引入接口I來消除類X對(duì)Y的依賴的方法,被稱作“控制反轉(zhuǎn)”,又叫做“依賴注入”。

需要注意的是,類Y可能還依賴于其他類。在應(yīng)用反轉(zhuǎn)之前,X依賴于Y,從而也間接依賴于Y所依賴的所有“其他類”。應(yīng)用控制反轉(zhuǎn)之后,不僅X對(duì)Y的直接依賴,且前面提到的那些所有的間接依賴也消除了。而新引入的接口I則不依賴于任何類。

IoC 的類型

Martin Fowler 將 IoC 分成三類。

  • Type 1 : 基于interface (interface injection)。Depending object 需要實(shí)作(implement) 特定 interface 以供框架注入所需物件。
  • Type 2 : 基于setter (setter injection)。Depending object 需要實(shí)現(xiàn)特定 setter 方法 (但不需要依賴特定interface),
  • Type 3 : 基于constructor (constructor injection)

有的框架,如Plexus 提出Type 4 IoC,以field為基礎(chǔ),惟此法到目前為止尚未被廣泛接納。[1]

各種框架不一定支援以上所有IoC類型。例如SpringFramework 支援Type 1、Type 2 及 Type 3 IoC,而 Plexus支援 Type 2、Type 3 和 Type 4。

控制反轉(zhuǎn)應(yīng)用實(shí)例

C++

  • PocoCapsule IoC and DSM framework GPL開源的,支持完全非侵入C++的控制反轉(zhuǎn)(IoC)及領(lǐng)域特定建模(DSM)容器

Java

使用Java語(yǔ)言寫成的程式在控制反轉(zhuǎn)容器(Inversion of Control Container)里應(yīng)用了控制反轉(zhuǎn)(Martin 2004)。軟件需要一個(gè)來自容器的物件,而容器自行建構(gòu)物件和它的附屬物。ATG 的 [[en:Dynamo Application Server|Dynamo 應(yīng)用程式服務(wù)器]是第一個(gè)利用這途徑的環(huán)境之一,近來關(guān)于這些容器的例子包含了 HiveMind、PicoContainer、Spring Framework(注意 Spring 是一個(gè)完整的企業(yè)平臺(tái),而非 IOC容器)、Apache ExcaliburSeasar 和 DPML Metro.

.NET

  • Spring.NET
  • ObjectBuilder
  • Structuremap
  • CastleProject
  • Seasar
  • Unity
  • Autofac
  • Ninject
  • LinFu?Hiro
  • Nlite mini

轉(zhuǎn)載于:https://www.cnblogs.com/codeyu/archive/2012/03/19/2406455.html

總結(jié)

以上是生活随笔為你收集整理的2012 依赖注入框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。