關於IoC的介紹

2021-08-29 15:37:00 字數 1999 閱讀 3508

我的書中的一段,貼出來。呵呵。大夥兒拍磚哦!by:張勇

ioc即inversion of control,控制反轉。它不是一種程式設計技術,而是一種設計模式。利用它,可以促進應用程式元件或類之間的鬆散耦合。一般的情況下,我們需要自己建立物件的例項,比如在computer類中建立乙個印表機的例項:

1printer printer = new dellprinter();//建立乙個戴爾印表機的例項

如果使用ioc,我們則不必再自己建立類的例項,而是將建立物件的任務交給ioc容器去做。這樣,我們在使用某個物件的時候,就可以直接從容器中獲取乙個例項。就像乙個好萊塢的原則一樣「don't call me.i'll call you!」,容器會在合適的時候建立它。我們就像不必考慮物件的銷毀一樣,也可以不必考慮物件的建立,這就是控制反轉。

這樣做有什麼好處呢?在上面的例子中,我們建立為我們的電腦安裝了乙個戴爾印表機(建立乙個戴爾印表機類的例項)。可是如果有一天,我們系統要公升級了,需要使用惠普的印表機。這時,由於我們把印表機已經「固化」到電腦中了(印表機和電腦的耦合很高),要更換印表機,就不得不先拆開電腦,從主機板中卸下印表機,再安裝新的印表機(修改computer類的源**,然後重新編譯,重新部署)。可以看到,這是乙個計算機專家才能完成的任務,對於乙個對計算機不是很了解的人來說,這將會是一場噩夢。那麼如何解決這個問題呢?辦法之一就是我們把印表機抽象成乙個介面:

1 public inte***ce printer

這樣各個廠商在生產印表機的時候,就只是需要實現這個介面所定義的功能就行了。就像我們在電腦上做乙個專門的印表機模組,需要的時候卸掉原來的模組,再安裝上新型號就的印表機可以了,前提是新的模組必須和以前的有一樣的功能和呼叫介面。在電腦中變成了這樣:

1 printer printer ; // 提供乙個印表機的介面

2 // 提供乙個安裝印表機的方法

3 public void setprinter(printer printer)

6

這樣看似很好的解決了上述問題。但是實際上電腦(computer)和印表機(printer)之間的耦合性仍然很高:印表機的**寫入了電腦中,我們不得不在使用之前先調setprinter方法為電腦「安裝」印表機,但是電腦使用者僅僅想使用印表機而已,可是這裡他卻不得不做安裝印表機的工作。

這種依賴關係在「分離關注」的思想下是無法忍耐的,於是產生了新的模式,即控制反轉( ioc )。使用這種方式,電腦 (computer) 只是需要提供乙個印表機 (printer) 的「屬性」和安裝印表機的「渠道」。如果需要(當需要使用列印任務時), ioc 容器會在合適的時候自動為電腦注入(安裝)印表機。這就好像我們請了個網管,我們要使用印表機的時候,可以直接告訴網管「我需要乙個惠普印表機 」,然後網管就自動的找到印表機並安裝好,我們就可以使用它了。這樣電腦使用者就可以完全不必關心印表機而只需使用它就行了。**如下:

1 public   class  computer  

6 public printer getprinter()

9 public void setprinter(printer printer)

12 }

1 < bean id ="computer" class ="com.computer" >

2 < property name ="printer" ref ="printer" />

3

4

spring 框架為我們提供了乙個優秀的ioc容器。我們只是需要在它的配置檔案中指明我們需要那個類的例項,這個類在那裡,spring的ioc容器會在合適的時候自動的為我們注入這個類的例項。從而我們可以完全不必考慮物件的建立工作,還可以實現應用程式各個元件的「即插即用」,而不需要修改源**。

spring提供呢多種配置檔案的形式,但是推薦使用xml配置檔案來驅動應用,儘管它也支援.properties檔案和資料庫的配置形式。

Ioc容器Autofac介紹

先看乙個例子 首先新建乙個工程,新增autofac引用。準備 和之前的一樣 inte ce idal class sqlserverdal idal class oracledal idal 接下來就是ioc的實現了 class datafactory 接下來就是獲取物件的例項並呼叫 static ...

Ioc容器Autofac介紹

先看乙個例子 首先新建乙個工程,新增autofac引用。準備 和之前的一樣 inte ce idal class sqlserverdal idal class oracledal idal 接下來就是ioc的實現了 class datafactory 接下來就是獲取物件的例項並呼叫 static ...

AutoFac 簡單好用的IOC介紹

0.安裝autofac的nuget 1.準備測試介面和類 class ballgame iplay class computergame iplay inte ce iplay 2.編寫autofac模組 class playmodule module 這樣的設計是主張模組化程式設計,把職責隔離到不...