🌱 一、什么是 IOC?
📖 定義(通俗理解):
IOC(Inversion of Control,控制反轉) 是一種設計思想:對象不再由你自己創建和管理,而是交給 Spring 容器來“注入”。
🧠 打個比喻:
以前你是老板,項目里要用什么對象你就自己 new 一個,比如:
UserService userService = new UserService();
用了 IOC 之后,你把這個“雇人干活”的工作交給了 Spring,自己就專心做業務邏輯,Spring 幫你創建并注入對象:
@Autowired
private UserService userService;
👉 你不控制對象的創建,而是“被動”接收對象——這就是控制的“反轉”。
🔧 二、Spring 是怎么實現 IOC 的?
Spring 提供了 IOC 容器,即 ApplicationContext
。這個容器負責:
- 掃描配置(XML 或 注解)
- 創建對象(Bean)
- 注入依賴
- 管理生命周期
常見注解方式:
@Component
public class UserService {public void hello() {System.out.println("Hello from UserService");}
}@RestController
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/hi")public String sayHi() {userService.hello();return "Hi";}
}
解釋:
@Component
:告訴 Spring,這個類要被托管@Autowired
:讓 Spring 把UserService
的實例注入進來- Spring 啟動時會創建這些 Bean 并放進 IOC 容器中
🧩 三、IOC 容器的兩大實現類
容器類 | 簡介 |
---|---|
BeanFactory | 輕量級,延遲加載,適合資源有限環境 |
ApplicationContext | 功能強大,默認加載所有 Bean,常用 |
🚀 四、IOC 帶來了什么好處?
優勢 | 說明 |
---|---|
解耦合 | 類與類之間不再直接依賴 |
更易于維護和測試 | 可以輕松替換實現類或 mock |
可配置性強 | 通過配置文件或注解靈活管理對象 |
方便擴展 | 可通過 AOP 織入功能,如日志、權限控制等 |
💬 五、一句話總結:
IOC 是 Spring 的核心理念,它讓對象之間的依賴關系從“主動創建”變成了“自動注入”,從而實現了松耦合和模塊化開發。