我的書中的一段,貼出來。呵呵。大伙兒拍磚哦!by:張勇
? IoC即Inversion of Control,控制反轉(zhuǎn)。它不是一種編程技術(shù),而是一種設(shè)計模式。利用它,可以促進應(yīng)用程序組件或類之間的松散耦合。一般的情況下,我們需要自己創(chuàng)建對象的實例,比如在Computer類中創(chuàng)建一個打印機的實例:

??? 這樣做有什么好處呢?在上面的例子中,我們創(chuàng)建為我們的電腦安裝了一個戴爾打印機(創(chuàng)建一個戴爾打印機類的實例)。可是如果有一天,我們系統(tǒng)要升級了,需要使用惠普的打印機。這時,由于我們把打印機已經(jīng)“固化”到電腦中了(打印機和電腦的耦合很高),要更換打印機,就不得不先拆開電腦,從主板中卸下打印機,再安裝新的打印機(修改Computer類的源代碼,然后重新編譯,重新部署)。可以看到,這是一個計算機專家才能完成的任務(wù),對于一個對計算機不是很了解的人來說,這將會是一場噩夢。那么如何解決這個問題呢?辦法之一就是我們把打印機抽象成一個接口:
?



2

3

這樣各個廠商在生產(chǎn)打印機的時候,就只是需要實現(xiàn)這個接口所定義的功能就行了。就像我們在電腦上做一個專門的打印機模塊,需要的時候卸掉原來的模塊,再安裝上新型號就的打印機可以了,前提是新的模塊必須和以前的有一樣的功能和調(diào)用接口。在電腦中變成了這樣:
?
?

2

3



4

5

6

?這樣看似很好的解決了上述問題。但是實際上電腦(Computer)和打印機(Printer)之間的耦合性仍然很高:打印機的代碼寫入了電腦中,我們不得不在使用之前先調(diào)SetPrinter方法為電腦“安裝”打印機,但是電腦使用者僅僅想使用打印機而已,可是這里他卻不得不做安裝打印機的工作。
這種依賴關(guān)系在“分離關(guān)注”的思想下是無法忍耐的,于是產(chǎn)生了新的模式,即控制反轉(zhuǎn)( IoC )。使用這種方式,電腦 (Computer) 只是需要提供一個打印機 (Printer) 的“屬性”和安裝打印機的“渠道”。如果需要(當(dāng)需要使用打印任務(wù)時), IoC 容器會在合適的時候自動為電腦注入(安裝)打印機。這就好像我們請了個網(wǎng)管,我們要使用打印機的時候,可以直接告訴網(wǎng)管“我需要一個惠普打印機 ”,然后網(wǎng)管就自動的找到打印機并安裝好,我們就可以使用它了。這樣電腦使用者就可以完全不必關(guān)心打印機而只需使用它就行了。代碼如下:



?2

?3



?4

?5

?6



?7

?8

?9



10

11

12

??

2

3

4

???Spring?框架為我們提供了一個優(yōu)秀的IoC容器。我們只是需要在它的配置文件中指明我們需要那個類的實例,這個類在那里,Spring的IoC容器會在合適的時候自動的為我們注入這個類的實例。從而我們可以完全不必考慮對象的創(chuàng)建工作,還可以實現(xiàn)應(yīng)用程序各個組件的“即插即用”,而不需要修改源代碼。
?? Spring提供呢多種配置文件的形式,但是推薦使用xml配置文件來驅(qū)動應(yīng)用,盡管它也支持.properties文件和數(shù)據(jù)庫的配置形式。
By:殘夢追月