總結一下 Spring的IOC DI

2021-06-10 01:53:59 字數 2371 閱讀 6723

國慶節剛過,應一些朋友的提問,總結一下spring中ioc也即di的通俗理解。

網友wm5920

解釋:ioc控制反**說的是建立物件例項的控制權從**控制剝離到ioc容器控制,實際就是你在xml檔案控制,側重於原理。

di依賴注入:說的是建立物件例項時,為這個物件注入屬性值或其它物件例項,側重於實現。

依賴就是有聯絡,有地方使用到它就是有依賴它,乙個系統不可能完全避免依賴。如果你的乙個類或者模組在專案中沒有用到它,恭喜你,可以從專案中剔除它或者排除它了,因為沒有乙個地方會依賴它。下面看乙個簡單的示例:

///

public class operationmain

}///

public class player

}/// /// **檔案

///

public class mediafile

player依賴mediafileoperationmain依賴playeroperationmain依賴mediafile耦合關係就是依賴關係,如果依賴關係相當繁雜,牽一髮而動全身,很難維護;依賴關係越少,耦合關係就越低,系統就越穩定,所以我們要減少依賴。

幸虧robert martin大師提出了物件導向設計原則----依賴倒置原則:   

理解:a.上層是使用者,下層是被使用者,這就導致的結果是上層依賴下層了,下層變動了,自然就會影響到上層了,導致系統不穩定,甚至是牽一髮而動全身。那怎麼減少依賴呢?就是上層和下層都去依賴另乙個抽象,這個抽象比較穩定,整個就來說就比較穩定了。

b.物件導向程式設計時面向抽象或者面向藉口程式設計,抽象一般比較穩定,實現抽象的具體肯定是要依賴抽象的,抽象不應該去依賴別的具體,應該依賴抽象。

根據原則如下改動:

結構很簡單,於是**大致如下:

package ioc;

/** * @author: 特種兵—ak47

* */

public class operationmain

}

package ioc;

/** * @author: 特種兵—ak47

* */

public inte***ce imediafile

package ioc;

/** * @author: 特種兵—ak47

* * @類說明 :

*/public class ***file implements imediafile

}

package ioc;

/** * @author: 特種兵—ak47

* * @類說明 :

*/public class mp4file implements imediafile

}

package ioc;

/** * @author: 特種兵—ak47

* */

public inte***ce iplayer

package ioc;

/** * @author: 特種兵—ak47

* * @類說明 :

*/public class player implements iplayer

}

測試程式:

package ioc;

import org.junit.test;

/** * @author: 特種兵—ak47

* * @類說明 :

*/public class ioctest

}

執行一下:

強調一下,ioc跟di要表達的是乙個意思

我們可以通過反射來建立,把具體的檔名寫在配置檔案裡,這時候客戶端**也不用變了,只需要改配置檔案就好了,穩定性又有了提高,如下:

public void playmedia()
這個具物件是哪乙個,全由配置檔案來控制了,這個具體物件的控制權交給了配置檔案了,這也是人們常說的控制反轉。

控制反轉ioc是inversion of control的縮寫,是說物件的控制權進行轉移,轉移到第三方,比如轉移交給了ioc容器,它就是乙個建立工廠,你要什麼物件,它就給你什麼物件,有了ioc容器,依賴關係就變了,原先的依賴關係就沒了,它們都依賴ioc容器了,通過ioc容器來建立它們之間的關係。

總結一下 Spring的IOC DI

size medium 國慶節剛過,應一些朋友的提問,總結一下spring中ioc也即di的通俗理解。b ioc di模式 1.依賴 b 依賴就是有聯絡,有地方使用到它就是有依賴它,乙個系統不可能完全避免依賴。如果你的乙個類或者模組在專案中沒有用到它,恭喜你,可以從專案中剔除它或者排除它了,因為沒有...

稍微總結一下

其實整個程式16日的時候應該已經搞得差不多,文件也已經比較詳細。但是由於這個禮拜又是筆試又是面試,所以都沒有時間review整個程式。今天看了一下,改了一些輸出檔案的位置,基本上完成了所有任務了。程式放在 http xiao 81 svn auto testing 下。其中包括三個可執行指令碼 1....

總結一下模板

二叉樹的各種操作 include include include includetypedef struct node tree void createbitree tree p 建樹 return void xpreorder tree p 輸出先序 void zpreorder tree p 輸...