您好,登錄后才能下訂單哦!
這篇文章主要介紹了Java設計原則的依賴倒置是什么的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Java設計原則的依賴倒置是什么文章都會有所收獲,下面我們一起來看看吧。
我們經常在框架開發過程中聽說依賴倒置、依賴反轉、控制反轉、依賴注入、IOC一些名詞,我們常聽的這些名詞和開發設計原則中的依賴反轉原則是有關系,我們來看看這幾個名詞:
控制反轉(IOC),這個是Spring面試基本上都會問的一個問題,IOC全稱Inversion of Controller,IOC不一定是Spring的特性,Spring是用IOC的一個基礎框架;簡單理解就是之前通過簡單的方法把業務代碼冗余在一起,需要改的時候比較麻煩,權限完全由開發者控制,反正意思是通過一些設計模式讓開發者不在關系基礎開發,只要實現應該實現的功能,權限交由程序控制;
依賴注入(DI),全稱為Dependency Injection,簡單理解就是需要操作的對象通過構造方法、get/set、接口構造的對象,通過外部傳入的對象注入新的對象,這個就是依賴注入,Spring就是運用比較好的一個框架;
依賴反轉原則(DIP),全稱為Dependency Inversion Principle,也可以叫依賴倒置原則,意思就是:高層模塊(high-level modules)不要依賴低層模塊(low-level)。高層模塊和低層模塊應該通過抽象(abstractions)來互相依賴。除此之外,抽象(abstractions)不要依賴具體實現細節(details),具體實現細節(details)依賴抽象(abstractions);
我們經常所說的高模塊和低模塊是指什么?我們怎么區分,或者畫圖的時候標注關系;
簡單來說就是,在調用鏈上,調用者屬于高層,被調用者屬于低層。為什么會用這樣一個設計呢,追根溯本就是松耦合,不然高模塊強綁定低模塊,也不會因為底層模塊的代碼而影響高層模塊;但是在實際場景中是否完全有必要遵守這一規則呢?我們來看一個常見的例子:
MVC架構:常用的使用方式Controller-->Service-->Dao,Controller對應Service來說就是高模塊,Service對于Dao來說也是高模塊,但是我們在實際業務場景中直接通過注入的形式開發,當然有的也可能不會直接注入,通過接口的形式獲取對象,這樣帶來的工作成本就會增加。
那我們就會有一個疑問,使用這一原則會帶來工作成本的增加嗎?按照我的理解話模塊也應該是需要劃分一個粒度,也需要分為模塊間關系、代碼間關鍵、基礎框架設計關系、業務代碼關系,我們要去考慮擴展性,如果來說業務基本上不會怎么擴展,完全沒有必要用到這一原則。
好萊塢原則簡稱Don‘t call us, we‘ll call you,科普下在好萊塢,把簡歷遞交給演藝公司后就只有回家等待。由演藝公司對整個娛樂項的完全控制,演員只能被動式的接受公司的差使,在需要的環節中,完成自己的演出。這和我們的依賴倒置原則不謀而合,所有依賴倒置原則也就叫好萊塢原則。
好萊塢原則的具體體現是模板方法模式,所有的組件都是被動的,所有的組件初始化和調用都由容器負責。這也是一個基礎框架應該考慮的點,主要有以下好處:
對基于接口編程的支持
減少單件和抽象工廠的依賴
降低業務和框架的耦合
業務組件可復用,可插拔
我們需要要理清一個概念IOC是Spring的一個特性,成就了Spring框架的特性,并不是Spring框架創造了IOC。
Spring的IOC有什么作用?所謂IOC,就是由Spring IOC 容器來負責對象的生命周期和對象之間的關系
Spring IOC被注入對象提供被依賴對象也有如下幾種方式:構造方法注入、stter方法注入、接口注入。
構造器注入,顧名思義就是被注入的對象通過在其構造方法中聲明依賴對象的參數列表,讓外部知道它需要哪些依賴對象。構造器注入比較簡單,通過構造方式構造完成之后就完全可以使用。
TestBean(Test test){
this.test = test;
}
對于 JavaBean 對象而言,我們一般都是通過 getter 和 setter 方法來訪問和設置對象的屬性。所以,當前對象只需要為其所依賴的對象提供相對應的 setter 方法,就可以通過該方法將相應的依賴對象設置到被注入對象中。相比于構造器注入,setter 方式注入會顯得比較寬松靈活些,它可以在任何時候進行注入
public class TestBean {
private Test test;
public void setTestBean(Test test) {
this.test = test;
}
}
接口方式注入顯得比較霸道,因為它需要被依賴的對象實現不必要的接口,所以我們要合理去使用這種場景,一般在基礎框架中很少存在,在業務領域就用的比較多了。
現在Spring主流注入方式主要通過注解去做實現,都是基于元注解@Component去實現,也就與@Component產生很多派生注解。
@Autowrited
private TestBean testBean;
@Component
public TestBean(){
}
關于“Java設計原則的依賴倒置是什么”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Java設計原則的依賴倒置是什么”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。