首页
/
每日頭條
/
職場
/
中科互聯的面試題
中科互聯的面試題
更新时间:2026-01-05 04:34:14

中科互聯的面試題(面試突擊73IoC和)1

IoC 和 DI 都是 Spring 框架中的重要概念,就像玫瑰花與愛情一樣,IoC 和 DI 通常情況下也是成對出現的。那 IoC 和 DI 什麼關系和區别呢?接下來,我們一起來看。

1.IoC 介紹

IoC 是 Inversion of Control 的縮寫,翻譯成中文是“控制反轉”的意思,它不是一個具體的技術,而是一個實現對象解耦的思想。

要解釋什麼是解耦?就要了解什麼是耦合,所謂的耦合是指:兩個或兩個以上對象存在依賴,當一方修改之後會影響另一方,那麼就說這些對象間存在耦合。而解耦就是解除兩個或兩個以上對象,修改之後影響另一方的問題。

那 IoC(控制反轉)是如何實現解耦的呢?

我們來舉一個例子,比如 A 對象中需要使用 B 對象的某個方法,那麼我們通常的實現方法是這樣的:

class A { public void init() { // 調用 B 類中的 init 方法 B b = new B(); b.init(); } } class B { public B() { } public void init() { System.out.println("你好,世界。"); } }

然而此時對象 A 和對象 B 是存在耦合的,因為一旦修改了 B 對象構造方法的參數之後,那麼 A 對象裡面的寫法也要跟着改變,比如當我們将構造方法改為以下代碼時:

class B { public B(String name) { System.out.println("姓名:" name); } public void init() { System.out.println("你好,世界。"); } }

此時構造方法已經從原本無參構造方法變成了有參的構造方法,這裡不考慮構造方法重載的情況,因為實際業務中,很可能是 B 類的構造方法寫錯了,忘記加參數了,于是後面又補充了一個參數,此時是不需要對構造方法進行重載的,那麼此時,之前對象 A 裡面的調用就會報錯,如下圖所示:

中科互聯的面試題(面試突擊73IoC和)2

這就是開發中經常遇到的一個問題,那怎麼解決呢?

我們可以通過将對象傳遞而并 new 對象的方式來解決,如下代碼所示:

class A { // 先定義一個需要依賴的 B 對象 private B b; // 通過構造方法實現賦值(初始化) public A(B b) { this.b = b; } public void init() { // 調用 B 類中的 init 方法 b.init(); } } class B { public B(String name) { System.out.println("姓名:" name); } public void init() { System.out.println("你好,世界。"); } }

這樣改造之後,無論構造方法怎麼修改,即使需要加更多的參數,而調用它的 A 類都無需做任何修改,這樣就實現了對象的解耦。

那這個解耦的示例和 IoC 有什麼關系呢?

IoC 實現的思路和上述示例一樣,就是通過将對象交給 Spring 中 IoC 容器管理,在其他類中不直接 new 對象,而是通過将對象傳遞到當前類的方式來實現解耦的。

小結

在 new 對象的時代,對象的管理權是由當前類控制的,而有了 IoC 之後,對象的管理權就交給非當前類的 IoC 容器管理了,此時對象的管理權就發生了反轉和改變,這就是 IoC,這就是控制(權)反轉。

2.DI 介紹

DI 是 Dependency Injection 的縮寫,翻譯成中文是“依賴注入”的意思。依賴注入不是一種設計實現,而是一種具體的技術,它是在 IoC 容器運行期間,動态地将某個依賴對象注入到當前對象的技術就叫做 DI(依賴注入)

在上述示例中,A 類在使用 B 類時,就是通過構造方法将依賴對象 B 引入的,這種實現方法就可以看作是通過構造方法實現依賴注入的手段,具體代碼如下:

class A { // 先定義一個需要依賴的 B 對象 private B b; // 通過構造方法實現賦值 public A(B b) { this.b = b; } public void init() { // 調用 B 類中的 init 方法 b.init(); } }

3.IoC VS DI

從上面的内容中我們可以看出,IoC 和 DI 雖然定義不同,但它們所做的事情都是一樣的,都是用來實現對象解耦的,而二者又有所不同:IoC 是一種設計思想,而 DI 是一種具體的實現技術

比如,磊哥今天心情比較好,想出去吃頓好的,那麼“想吃頓好的”就是一種思想、就是 IoC。

但什麼才是“好的(飯)”呢?海底撈還是韓式料理?具體吃什麼是 DI。

因此“磊哥今天心情比較好,想出去吃頓好的”是一種思想、是 IoC,而吃一頓海底撈而非韓式料理就是具體的實現、是 DI。

總結

IoC 和 DI 都是 Spring 框架中的重要概念,它們都是用來實現對象解耦的,其中 IoC(控制反轉)是一種設計思想,而 DI(依賴注入)是一種具體的實現手段。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
dnf瞎子下個版本加強嗎(17個職業平衡性調整)
dnf瞎子下個版本加強嗎(17個職業平衡性調整)
  今日,DNF進行了版本大更新,其中就是大家期待已久的職業平衡性調整,本次的版本更新一共涉及到17個職業,下面台長就來和大家一一盤點,看看對你的職業是否有影響:   1、阿修羅  鬼印珠、無雙波、邪光波動陣、暗天波動眼、雷神之息、天雷 · 波動劍 變更為獨立攻擊。(這樣的變化等于是由百分比職業變更為固傷職業了,有望告别下水道)   心眼 技能增加5%的命中...
2026-01-05
智慧路燈杆規劃圖(标準化工作将助力燈都古鎮智慧路燈杆示範路深度融合)
智慧路燈杆規劃圖(标準化工作将助力燈都古鎮智慧路燈杆示範路深度融合)
  為響應國家建設“智慧城市”的發展規劃,燈都古鎮大力發展“智慧燈都”建設,充分運用互聯網、物聯網、大數據等實時技術手段,構建集智慧政務、智慧交通、智慧城管等于一體的“智慧燈都”管理服務體系。9月5日,中智德智慧物聯科技集團有限公司總經理張桂春一行4人到訪中山市燈飾照明行業協會,就加強與行業協會有效資源深入合作,共同促進燈都古鎮智慧産業發展升級,為燈都古鎮建...
2026-01-05
dnf60版本各個副本前置(DNF60版本異界回憶啟示錄)
dnf60版本各個副本前置(DNF60版本異界回憶啟示錄)
  說起DNF是大家已經在熟悉不過的網絡遊戲了,是由韓國NEOPLE開發的,于2008年在國服正式登陸,是一款免費角色扮演的2D闖關遊戲,距離至今已十餘年之久,而我們也與DNF風雨同舟十餘年,現在回憶起已是慢慢的回憶,甚至有時候還熱淚盈眶,懷念當時一起組隊刷圖升級,懷念當年一起組隊刷深淵,還念一起去PK場PK的成年往事;說道回憶各位小夥伴們還記的之前最開始的...
2026-01-05
樂視到底能不能翻身(沒有老闆和)
樂視到底能不能翻身(沒有老闆和)
     樂融大廈仍有超四百位員工在此辦公。 (南方周末記者 梅嶺/圖)   “樂視輝煌時、欠債時,我們天天在你們大廈底下排隊趴活,現在樂視還在嗎?”樂視網(400084.OC)員工馬賽打車上下班時,經常會遭到出租車司機調侃。   “我們就沒有倒下過,隻是現在還在爬。”馬賽對南方周末記者說,2010年她入職時,工号排在兩百多位,鼎盛時期兩萬多名員工跟随賈躍亭...
2026-01-05
dnf鬼劍士二覺技能欄推薦(鬼劍士全體削弱)
dnf鬼劍士二覺技能欄推薦(鬼劍士全體削弱)
  不知不覺,距離8月20日冬季發布會結束,已經有一小段時間了!這次發布會公告9月會加入的内容有很多,例如日常/周常副本減負、神話改版、罩子兵削弱,以及第3波職業平衡等等,其中要說玩家最關心的,莫過于第3波職業平衡了。這次平衡總共涉及22個職業,除了劍帝、刃影、外傳職業之外,未加強過的職業都有在其中。   策劃提前爆料氣功罩子削弱  而在這次平衡的22個職業...
2026-01-05
Copyright 2023-2026 - www.tftnews.com All Rights Reserved