🌱 一、什么是 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 的核心理念,它让对象之间的依赖关系从“主动创建”变成了“自动注入”,从而实现了松耦合和模块化开发。