spring的依賴注入如何降低了耦合


剛看spring,對依賴注入DI產生了迷惘,通過查看一些資料總結了一下,希望對此理解深入的人能再指點迷津

依賴注入:程序運行過程中,如需另一個對象協作(調用它的方法、訪問他的屬性時),無須在代碼中創建被調用者,而是依賴於外部容器的注入

看過一些比較好的回答

1.一個人(Java實例,調用者)需要一把斧子(Java實例,被調用者)

在原始社會裏,幾乎沒有社會分工;需要斧子的人(調用者)只能自己去磨一把斧子(被調用者);對應情形爲:Java程序裏的調用者自己創建被調用者,通常採用new關鍵字調用構造器創建一個被調用者

進入工業社會,工廠出現了,斧子不再由普通人完成,而在工廠裏被生產出來,此時需要斧子的人(調用者)找到工廠,購買斧子,無須關心斧子的製造過程;對應簡單工廠設計模式,調用者只需定位工廠,無須管理被調用者的具體實現

進入“共產主義”社會,需要斧子的人甚至無須定位工廠,“坐等”社會提供即可;調用者無須關心被調用者的實現,無須理會工廠,等待Spring依賴注入

總之依賴注入的意思是你需要的東西不是由你創建的,而是第三方,或者說容器提供給你的。這樣的設計符合正交性,即所謂的鬆耦合。

2.依賴注入是調用者僅通過聲明某個組件就可以獲得組件的控制權,而對該組件的依賴關係管理、查找、加載由外部完成。

3.依賴注入就是你不用關心對象的生命週期,什麼時候被創建,什麼時候銷燬,只需直接使用即可,對象的生命週期由提供依賴注入的框架來管理。

一個簡單的例子如下:

public class example1 implement example1Impl{

private example2 exam2;

public example1(){

exam2=new exam2();

}

public void xxx(){

exam2.xxx();

}

}

採用注入的方式(構造器注入)

public class example1 implement example1Impl{

private example2 exam2;

public example1(exam2){

this.exam2=exam2;

}

public void xxx(){

exam2.xxx();

}

}

如何理解第二個比第一個降低了example1example2類之間的耦合度呢?

Spring可以通過註解和xml配置文件來體現依賴注入,example1不需要自行創建example2的對象,容器通過配置文件設置beanproperty屬性,這樣代碼中的依賴關係轉移到了配置文件中了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章