iT邦幫忙

2023 iThome 鐵人賽

DAY 4
7
Software Development

Spring Boot 零基礎入門系列 第 4

Spring Boot 零基礎入門 (5) - Spring IoC 簡介

  • 分享至 

  • xImage
  •  

什麼是 IoC?


IoC 的全稱是 Inversion of Control,中文翻譯成「控制反轉」,而 IoC 的概念,就是「將 object(物件)的控制權,交給了外部的 Spring 容器來管理」,所謂的 Control(控制),就是對於 object 的控制權。

所以像是我們以前在寫 Java 程式時,我們就會在 Teacher class 中去 new 一個 HpPrinter 出來,因此這個 HpPrinter 的控制權,就是在自己(Teacher class)的手上。

而當我們用了 Spring 框架之後,則是會由 Spring 容器統一去 new 一個 HpPrinter 出來,再去提供給大家使用,因此 HpPrinter 的控制權,就是在外部容器(Spring 容器)的手上。

也因為我們 將 HpPrinter 的「控制權」,從自己手上「轉移到」外部的 Spring 容器,由外部的 Spring 容器統一去做管理,所以就稱為是 Inversion of Control,簡稱為 IoC。

Spring IoC 的優點


使用 Spring IoC 有三大好處,分別是:

1. Loose coupling(鬆耦合)

使用 Spring IoC 的第一個優點,就是可以達到 class 之間的鬆耦合,即是可以「降低各個 class 之間的關聯性」。

像是我們本來必須要在 Teacher 中,手動去指定我們要使用的是 HpPrinter 印表機,而這就會讓 Teacher 和 HpPrinter 的關聯性變大。

但是當我們改用了 Spring IoC 之後,Teacher 就只要去和 Spring 容器拿一台印表機,就可以直接直接去印東西了,所以 Teacher 就不需要了解這個印表機到底是 HP 牌還是 Canon 牌,如此就降低了 Teacher 和 HpPrinter 之間的關聯性。

因此使用 Spring IoC 的第一個好處,就是可以降低 class 之間的關聯性。

2. Lifecycle management(生命週期管理)

使用 Spring IoC 的第二個優點,則是統一的生命週期管理。

因為我們將 HpPrinter 改成交由 Spring 容器來管理,因此 Spring 就會負責 HpPrinter 的創建、初始化、以及銷毀,所以就不需要我們親自去處理這件事情。

所以使用 Spring IoC 的第二個好處,就是讓 Spring 容器能夠統一的,對所有 object 進行生命週期的管理。

3. More testable(方便測試程式)

使用 Spring IoC 的第三個優點,即是更加方便的測試程式。

因為所有的 object 都是由外部的 Spring 容器來做管理,因此我們就可以使用 Mock 的技術,在測試的過程中,將 Spring 容器中的 object 給替換掉,這樣子就可以變免受到其他的外部服務影響,更聚焦在當前這個單元測試想要測試的部分。


上一篇
Spring Boot 零基礎入門 (4) - 第一個 Spring Boot 程式
下一篇
Spring Boot 零基礎入門 (6) - IoC、DI、Bean 的介紹
系列文
Spring Boot 零基礎入門29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
凱文大叔
iT邦新手 3 級 ‧ 2023-11-04 09:19:53

真是淺顯易懂,在 Springboot 最常使用的 IoC 應該就是資料庫的部分,程式中只需要實作具體業務邏輯,控制就寫在設定檔中,想換不同資料庫就改變設定檔,程式都不用動

1
kobukuro
iT邦新手 5 級 ‧ 2025-01-29 09:36:34

感謝教學!

我要留言

立即登入留言