java框架篇--底層源碼分析 Spring 的核心功能和執行流程?(下)

上一課時我們講了 Bean 相關的內容,它其實也是屬於 IoC 的具體實現之一,本課時我們就來講講 Spring 中其他幾個高頻的面試點,希望能起到拋磚引玉的作用,能爲你理解 Spring 打開一扇門。因爲 Spring 涉及的內容和知識點太多了,用它來寫一本書也綽綽有餘,因此這裏我們只講核心的內容,希望下來你能查漏補缺,完善自己的 Spring 技術棧。

我們本課時的面試題是,談一談你對 IoC 和 DI 的理解。

典型回答

IoC(Inversion of Control,翻譯爲“控制反轉”)不是一個具體的技術,而是一種設計思想。與傳統控制流相比,IoC 會顛倒控制流,在傳統的編程中需要開發者自行創建並銷燬對象,而在 IoC 中會把這些操作交給框架來處理,這樣開發者就不用關注具體的實現細節了,拿來直接用就可以了,這就是控制反轉。

IoC 很好的體現出了面向對象的設計法則之一——好萊塢法則:“別找我們,我們找你”。即由 IoC 容器幫對象找到相應的依賴對象並注入,而不是由對象主動去找。

舉個例子,比如說傳統找對象,先要設定好你的要求,如身高、體重、長相等,然後再一個一個的主動去找符合要求的對象,而 IoC 相當於,你把這些要求直接告訴婚介中心,由他們直接給你匹配到符合要求的對象,理想情況下是直接會幫你找到合適的對象,這就是傳統編程模式和 IoC 的區別。

DI(Dependency Injection,翻譯爲“依賴注入”)表示組件間的依賴關係交由容器在運行期自動生成,也就是說,由容器動態的將某個依賴關係注入到組件之中,這樣就能提升組件的重用頻率。通過依賴注入機制,我們只需要通過簡單的配置,就可指定目標需要的資源,完成自身的業務邏輯,而不需要關心資源來自哪裏、由誰實現等問題。

IoC 和 DI 其實是同一個概念從不同角度的描述的,由於控制反轉這個概念比較含糊(可能只理解成了容器控制對象這一個層面,很難讓人想到誰來維護對象關係),所以 2004 年被開發者尊稱爲“教父”的 Martin Fowler(世界頂級專家,敏捷開發方法的創始人之一)又給出了一個新的名字“依賴注入”,相對 IoC 而言,“依賴注入”明確描述了“被注入對象依賴 IoC 容器配置

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