您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)控制反轉(zhuǎn)的意思是什么,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
控制反轉(zhuǎn)是面向?qū)ο缶幊讨械囊环N設(shè)計(jì)原則,可以用來(lái)減低計(jì)算機(jī)代碼之間的耦合度,還可以通過(guò)控制反轉(zhuǎn),讓對(duì)象在被創(chuàng)建的時(shí)候,由一個(gè)調(diào)控系統(tǒng)內(nèi)所有對(duì)象的外界實(shí)體將其所依賴的對(duì)象的引用傳遞給它。
控制反轉(zhuǎn)(Inversion of Control,縮寫為IoC),是面向?qū)ο缶幊讨械囊环N設(shè)計(jì)原則,可以用來(lái)減低計(jì)算機(jī)代碼之間的耦合度。其中最常見(jiàn)的方式叫做依賴注入(Dependency Injection,簡(jiǎn)稱DI),還有一種方式叫“依賴查找”(Dependency Lookup)。通過(guò)控制反轉(zhuǎn),對(duì)象在被創(chuàng)建的時(shí)候,由一個(gè)調(diào)控系統(tǒng)內(nèi)所有對(duì)象的外界實(shí)體將其所依賴的對(duì)象的引用傳遞給它。也可以說(shuō),依賴被注入到對(duì)象中。
控制反轉(zhuǎn)實(shí)現(xiàn)策略
IoC是一個(gè)很大的概念,可以用不同的方式實(shí)現(xiàn)。其主要形式有兩種:
依賴查找:容器提供回調(diào)接口和上下文條件給組件。EJB和Apache Avalon 都使用這種方式。這樣一來(lái),組件就必須使用容器提供的API來(lái)查找資源和協(xié)作對(duì)象,僅有的控制反轉(zhuǎn)只體現(xiàn)在那些回調(diào)方法上(也就是上面所說(shuō)的 類型1):容器將調(diào)用這些回調(diào)方法,從而讓應(yīng)用代碼獲得相關(guān)資源。
依賴注入:組件不做定位查詢,只提供普通的Java方法讓容器去決定依賴關(guān)系。容器全權(quán)負(fù)責(zé)的組件的裝配,它會(huì)把符合依賴關(guān)系的對(duì)象通過(guò)JavaBean屬性或者構(gòu)造函數(shù)傳遞給需要的對(duì)象。通過(guò)JavaBean屬性注射依賴關(guān)系的做法稱為設(shè)值方法注入(Setter Injection);將依賴關(guān)系作為構(gòu)造函數(shù)參數(shù)傳入的做法稱為構(gòu)造器注入(Constructor Injection)
控制反轉(zhuǎn)實(shí)現(xiàn)方法
實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)層
數(shù)據(jù)訪問(wèn)層有兩個(gè)目標(biāo)。第一是將數(shù)據(jù)庫(kù)引擎從應(yīng)用中抽象出來(lái),這樣就可以隨時(shí)改變數(shù)據(jù)庫(kù)—比方說(shuō),從微軟SQL變成Oracle。不過(guò)在實(shí)踐上很少會(huì)這么做,也沒(méi)有足夠的理由和能力去通過(guò)使用實(shí)現(xiàn)數(shù)據(jù)訪問(wèn)層而對(duì)現(xiàn)有的應(yīng)用進(jìn)行重構(gòu)。
第二個(gè)目標(biāo)是將數(shù)據(jù)模型從數(shù)據(jù)庫(kù)實(shí)現(xiàn)中抽象出來(lái)。這使得數(shù)據(jù)庫(kù)或代碼開(kāi)源根據(jù)需要改變,同時(shí)只會(huì)影響主應(yīng)用的一小部分——數(shù)據(jù)訪問(wèn)層。這一目標(biāo)是值得的,為了在現(xiàn)有系統(tǒng)中實(shí)現(xiàn)它進(jìn)行必要的重構(gòu)。
模塊與接口重構(gòu)
依賴注入背后的一個(gè)核心思想是單一功能原則(single responsibility principle)。該原則指出,每一個(gè)對(duì)象應(yīng)該有一個(gè)特定的目的,而應(yīng)用需要利用這一目的的不同部分應(yīng)當(dāng)使用合適的對(duì)象。這意味著這些對(duì)象在系統(tǒng)的任何地方都可以重用。但在現(xiàn)有系統(tǒng)里面很多時(shí)候都不是這樣的。
隨時(shí)增加單元測(cè)試
把功能封裝到整個(gè)對(duì)象里面會(huì)導(dǎo)致自動(dòng)測(cè)試?yán)щy或者不可能。將模塊和接口與特定對(duì)象隔離,以這種方式重構(gòu)可以執(zhí)行更先進(jìn)的單元測(cè)試。按照后面再增加測(cè)試的想法繼續(xù)重構(gòu)模塊是誘惑力的,但這是錯(cuò)誤的。
使用服務(wù)定位器而不是構(gòu)造注入
實(shí)現(xiàn)控制反轉(zhuǎn)不止一種方法。最常見(jiàn)的辦法是使用構(gòu)造注入,這需要在對(duì)象首次被創(chuàng)建時(shí)提供所有的軟件依賴。然而,構(gòu)造注入要假設(shè)整個(gè)系統(tǒng)都使用這一模式,這意味著整個(gè)系統(tǒng)必須同時(shí)進(jìn)行重構(gòu)。這很困難、有風(fēng)險(xiǎn),且耗時(shí)。
以上就是控制反轉(zhuǎn)的意思是什么,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。