目录
[1. 什么是 IoC?](#1. 什么是 IoC?)
[2. 传统方式 vs IoC 方式](#2. 传统方式 vs IoC 方式)
[2.1 传统方式(紧耦合)](#2.1 传统方式(紧耦合))
[2.2 IoC 方式(解耦)](#2.2 IoC 方式(解耦))
[3. IoC 的本质是什么?](#3. IoC 的本质是什么?)
[4. IoC 与 DI 的关系](#4. IoC 与 DI 的关系)
[5. Spring IoC 容器的核心职责](#5. Spring IoC 容器的核心职责)
[6. 常见注入方式](#6. 常见注入方式)
[7. IoC 的应用场景](#7. IoC 的应用场景)
[8. 一句话总结](#8. 一句话总结)
1. 什么是 IoC?
IoC(Inversion of Control,控制反转)是一种设计思想 ,它的核心是:将对象的创建和依赖关系的维护,从程序代码中交给容器来完成。
在传统开发中,对象的控制权掌握在程序员手中;
而在 IoC 模式下,这个控制权被"反转"给了容器。
2. 传统方式 vs IoC 方式
2.1 传统方式(紧耦合)
java
public class UserService {
private UserDao userDao = new UserDao();
}
问题:
-
类之间强依赖
-
难以替换实现
-
不利于测试和扩展
2.2 IoC 方式(解耦)
java
public class UserService {
private UserDao userDao;
public UserService(UserDao userDao) {
this.userDao = userDao;
}
}
对象的创建和注入交给 Spring:
java
@Component
public class UserDao {}
java
@Service
public class UserService {
@Autowired
private UserDao userDao;
}
3. IoC 的本质是什么?
本质只有一句话:对象不再自己创建依赖,而是被动接收依赖。
这带来了:
-
低耦合
-
高可维护性
-
更易扩展
4. IoC 与 DI 的关系
| 名称 | 含义 |
|---|---|
| IoC | 一种设计思想 |
| DI(Dependency Injection) | IoC 的具体实现方式 |
DI 是手段,IoC 是目的
5. Spring IoC 容器的核心职责
Spring IoC 容器主要做三件事:
-
创建对象(Bean)
-
管理对象生命周期
-
维护对象之间的依赖关系
6. 常见注入方式
-
构造器注入(推荐)
-
Setter 注入
-
字段注入(
@Autowired)
7. IoC 的应用场景
-
Service / Dao 解耦
-
配置驱动开发
-
单元测试(Mock)
-
大型项目模块化设计
8. 一句话总结
IoC 是一种"把对象控制权交给容器"的设计思想,是 Spring 的基石。