IoC是什麼東東?

2022-09-07 06:39:12 字數 1515 閱讀 7466

ioc(inversion of control):控制反轉。是物件導向程式設計中的一種設計原則,可以用來減低計算機**之間的耦合度。

其中最常見的方式叫做依賴注入(dependency injection,簡稱di),還有一種方式叫「依賴查詢」(dependency lookup)。

通過控制反轉,物件在被建立的時候,由乙個調控系統內所有物件的外界實體將其所依賴的物件的引用傳遞給它。也可以說,依賴被注入到物件中。

早在2023年,martin fowler就提出了「哪些方面的控制被反轉了?」這個問題。他總結出是依賴物件的獲得被反轉了,因為大多數應用程式都是由兩個或是更多的類通過彼此的合作來實現企業邏輯,這使得每個物件都需要獲取與其合作的物件(也就是它所依賴的物件)的引用。如果這個獲取過程要靠自身實現,那麼這將導致**高度耦合並且難以維護和除錯。

ioc模式,系統中通過引入實現了ioc模式的ioc容器,即可由ioc容器來管理物件的生命週期、依賴關係等,從而使得應用程式的配置和依賴性規範與實際的應用程式**分離。其中乙個特點就是通過文字的配置檔案進行應用程式元件間相互關係的配置,而不用重新修改並編譯具體的**。

當前比較知名的ioc容器有:pico container、**alon 、spring、jboss、hivemind、ejb等。

在上面的幾個ioc容器中,輕量級的有pico container、**alon、spring、hivemind等,超重量級的有ejb,而半輕半重的有容器有jboss,jdon等。

可以把ioc模式看作工廠模式的昇華,把ioc容器看作是乙個大工廠,只不過這個大工廠裡要生成的物件都是在xml檔案中給出定義的。利用j**a 的「反射」程式設計,根據xml中給出的類定義生成相應的物件。從實現來看,以前在工廠模式裡寫死了的物件,ioc模式改為配置xml檔案,這就把工廠和要生成的物件兩者隔離,極大提高了靈活性和可維護性。

ioc中最基本的j**a技術就是「反射」程式設計。通俗的說,反射就是根據給出的類名(字串)來生成物件。這種程式設計方式可以讓應用在執行時才動態決定生成哪一種物件。反射的應用是很廣泛的,像hibernate、spring中都是用「反射」做為最基本的技術手段。

在過去,反射程式設計方式相對於正常的物件生成方式要慢10幾倍,這也許也是當時為什麼反射技術沒有普遍應用開來的原因。但經sun改良優化後,反射方式生成物件和通常物件生成方式,速度已經相差不大了(但依然有一倍以上的差距)。

ioc是乙個很大的概念,可以用不同的方式實現。其主要形式有兩種:

依賴查詢:容器提供**介面和上下文條件給元件。ejb和apache **alon 都使用這種方式。這樣一來,元件就必須使用容器提供的api來查詢資源和協作物件,僅有的控制反轉只體現在那些**方法上(也就是上面所說的 型別1):容器將呼叫這些**方法,從而讓應用**獲得相關資源。

依賴注入:元件不做定位查詢,只提供普通的j**a方法讓容器去決定依賴關係。容器全權負責的元件的裝配,它會把符合依賴關係的物件通過j**abean屬性或者建構函式傳遞給需要的物件。通過j**abean屬性注射依賴關係的做法稱為設值方法注入(setter injection);將依賴關係作為構造函式引數傳入的做法稱為構造器注入(constructor injection)

「 」是什麼東東?

w為words中的每個元素,w.length 為該元素的長度,下列 找出words陣列中最短元素的長度 int shortestword words.min w w.length console.writeline shortestword.tostring string digits digit為...

SSH 是什麼東東?

ssh為secure shell的縮寫。為建立在應用層基礎上的安全協議。主要為了遠端登入回話和其他網路服務提供安全的協議。傳統的ftp telnet本質上都是不安全的,因為它們咋網路上資料和口令的傳輸都是明文的方式,對於一些別有用心的人就非常容易截獲這些口令和資料。受到 中間人 這種方式的攻擊。中間...

DTO VO BO PO DO 都是什麼東東

1 前端展示的資料,在介面資料返回給前端的時候需要轉成vo 2 個人理解使用場景,介面層服務中,將dto轉成vo,返回給前台 1 主要在服務內部使用的業務物件 2 可以包含多個物件,可以用於物件的聚合操作 3 個人理解使用場景,在服務層服務中,由dto轉成bo然後進行業務處理後,轉成dto返回到介面...