IoC(Inversion of Control,控制反轉)是 Spring 核心。傳統開發中,對象自行創建、查找、銷毀依賴(如 `new Connection()`、JNDI 查找),導致高耦合。Spring 引入容器托管對象生命週期與依賴關係,實現控制反轉。DI(Dependency Injection,依賴注入)是具體實現手段。
| 階段 | 傳統模式(無 IoC) | Spring IoC 模式 |
|---|---|---|
| 角色 | 你(對象) | 你(對象) |
| 目標 | 女友(依賴對象) | 女友(依賴對象) |
| 過程 | 自己到處尋找、打聽興趣、刷臉、送禮、表白... 全程自己掌控 | 委託婚介所(容器):填寫需求單(配置),婚介所按要求推薦,你只管談戀愛 |
| 控制權 | 你控制女友對象的創建/銷毀 | 婚介所控制女友對象的生命週期 |
| 耦合度 | 高:你綁定具體女友實現 | 低:你依賴抽象「女友介面」,具體實現由容器注入 |
| 異常處理 | 自己處理各種拒絕、分手 | 不符合要求拋出異常,容器統一攔截 |
// 傳統:高耦合,難測試
public class UserService {
private UserDao userDao = new UserDaoImpl(); // 綁定具體實現
}
// Spring IoC + 構造器注入:低耦合,易測試
@Service
public class UserService {
private final UserDao userDao;
@Autowired
public UserService(UserDao userDao) { this.userDao = userDao; }
}
// 單元測試時可直接傳入 Mockito.mock(UserDao.class)
Spring IoC 如同婚介所,將「對象創建與綁定」的控制權從業務代碼收回容器,通過 DI 將依賴「推」給對象。理解這一點,Spring 核心架構便豁然開朗。