面試題 什麼是控制反轉和依賴注入?

2021-09-24 12:28:43 字數 3352 閱讀 9026

我們都知道控制反轉和依賴注入是spring ioc的核心思想,也是面試經常被問到的話題,看到這篇文章又可以跟面試吹逼了,想要了解這兩個就必須要了解設計原則中的依賴倒置原則

依賴倒置原則

指程式要依賴於抽象介面,不要依賴於具體實現。

舉個栗子

假設公司需要開發一輛車,以輪胎為主體,就需要先設計輪胎,然後根據輪胎大小設計底盤,接著根據底盤設計車身,最後根據車身設計好整個汽車。這樣就出現了一種"依賴關係":汽車依賴車身,車身依賴底盤,底盤依賴輪子;

這種設計表面看起來沒什麼問題,但是如果你要修改輪胎大小,那底盤、車身都要改,維護成本很大;

於是,我們倒過來設計,以汽車為主體,先把想要什麼樣的汽車設計出來,然後根據汽車設計出車身,接著根據車身設計底盤,最後根據底盤設計輪胎。

**實現

設計初稿:以輪胎為主設計汽車

/**

* 輪胎類

* @author: hugoldwater

* @date: 2019/6/16 10:46 pm

* @version 1.0

*/public

class

tire

}/**

* 底盤類

* @author: hugoldwater

* @date: 2019/6/16 10:46 pm

* @version 1.0

*/public

class

bottom

}/**

* 車身類

* @author: hugoldwater

* @date: 2019/6/16 10:45 pm

* @version 1.0

*/public

class

body

}/**

* 汽車類

* @author: hugoldwater

* @date: 2019/6/16 10:45 pm

* @version 1.0

*/public

class

carpublic

void

run()}

/** * 測試類

* @author: hugoldwater

* @date: 2019/6/16 11:00 pm

* @version 1.0

*/public

class

}

修改輪胎大小為100

如果領導有一天要求要給輪胎加個形狀或者加個顏色啥的,又要全都改一遍,這樣的設計違反了開閉原則

/**

* 輪胎類

* @author: hugoldwater

* @date: 2019/6/16 10:46 pm

* @version 1.0

*/public

class

tire

}/**

* 底盤類

* @author: hugoldwater

* @date: 2019/6/16 10:46 pm

* @version 1.0

*/public

class

bottom

}/**

* 車身類

* @author: hugoldwater

* @date: 2019/6/16 10:45 pm

* @version 1.0

*/public

class

body

}/**

* 汽車類

* @author: hugoldwater

* @date: 2019/6/16 10:45 pm

* @version 1.0

*/public

class

carpublic

void

run()}

/** * 測試類

* @author: hugoldwater

* @date: 2019/6/16 11:00 pm

* @version 1.0

*/public

class

}

設計終稿:以汽車為主設計輪胎

符合依賴倒置、開閉原則,如果領導要求修改汽車輪胎大小或者形狀,只需要修改tire即可,維護成本非常低,完美

/**

* 汽車類

* @author: hugoldwater

* @date: 2019/6/16 10:45 pm

* @version 1.0

*/public

class

carpublic

void

run()}

/** * 車身類

* @author: hugoldwater

* @date: 2019/6/16 10:45 pm

* @version 1.0

*/public

class

body

}/**

* 底盤類

* @author: hugoldwater

* @date: 2019/6/16 10:46 pm

* @version 1.0

*/public

class

bottom

}/**

* 輪胎類

* @author: hugoldwater

* @date: 2019/6/16 10:46 pm

* @version 1.0

*/public

class

tire

}/**

* 測試類

* @author: hugoldwater

* @date: 2019/6/16 11:00 pm

* @version 1.0

*/public

class

}

總結:

依賴倒置原則:是由上層控制下層,而不是下層控制上層;控制反轉就是基於這種思想來實現的,將控制權反轉過來;上面還用了依賴注入中的構造器注入的方式。

控制反轉 依賴注入和控制反轉

依賴注入 di 和控制反轉 ioc 基本是乙個意思,因為說起來誰都離不開誰。簡單來說,a依賴b,但a不控制b的建立和銷毀,僅使用b,那麼b的控制權交給a之外處理,這叫控制反轉 ioc 而a要依賴b,必然要使用b的instance,那麼 通過a的介面,把b傳入 通過a的構造,把b傳入 通過設定a的屬性...

到底什麼是控制反轉 IOC 和依賴注入 DI

一 到底什麼是控制反轉 ioc 和依賴注入 di 1 控制反轉 2 依賴注入 3 二者關係 在程式設計中,當我們用到乙個物件時,首先需要主動建立它,但是在大型專案中,大家分工合作,也許我們要用到的物件對應的類還沒有被編寫出來,我們肯定沒法辦new出來,這個時候就有了spring框架,物件交給spri...

依賴注入和控制反轉

還是從上次機房合作驗收說起,其中乙個特別厲害的師姐提到了依賴注入和控制反轉,剛剛聽到這個的時候,感覺很熟悉,就是不知道在 看到過,想起了公尺老師說的那句話,不怕不知道,就怕不知道 不怕不知道它,就怕遇到了不知道它是什麼意思,我可是上公升到了不知道的第二個階段。廢話不說了,直奔主題吧。記得在哪見過,就...