# 📦 IoC 容器学习

控制反转 (Inversion of Control) 与依赖注入 (Dependency Injection)

### 📚 核心概念

#### 什么是 IoC？

控制反转 (Inversion of Control)：将对象的创建和管理交给 Spring 容器，而不是由开发者手动创建。

依赖注入 (Dependency Injection)：IoC 的一种实现方式，通过构造器、Setter 或字段将依赖注入到对象中。

#### 为什么用 IoC？

- ✅ 解耦：对象之间不直接依赖，通过接口交互
- ✅ 可测试：方便使用 Mock 对象进行单元测试
- ✅ 可维护：集中管理对象生命周期
- ✅ AOP 支持：便于实现切面编程

### 🔍 查看所有 Bean

Spring 容器中管理的所有 Bean 对象

### 📊 Bean 作用域

作用域 | 说明 | 使用场景
--- | --- | ---
singleton | 默认，整个应用只有一个实例 | 无状态的服务、配置类
prototype | 每次请求都创建新实例 | 有状态的对象
request | 每个 HTTP 请求一个实例 | Web 应用
session | 每个 HTTP 会话一个实例 | 用户会话数据

### ⚡ 性能统计

实时监控方法执行时间和调用次数

### 💉 依赖注入方式对比

方式 | 优点 | 缺点 | 推荐度
--- | --- | --- | ---
构造器注入 | 明确依赖、不可变、易测试 | 参数多时代码长 | ⭐⭐⭐⭐⭐
Setter 注入 | 可选依赖、灵活 | 可能为 null | ⭐⭐⭐
字段注入 | 代码简洁 | 隐藏依赖、难测试 | ⭐