Spring IOC 本质一句话:
❗ "对象的创建与依赖关系,不由你控制,而是交给 Spring 容器控制"
IOC 到底做了什么?
一句话:
Spring 帮你维护了一个"对象工厂 + 对象仓库"
这个仓库叫ApplicationContext(IOC容器)
传统 Java(你以前的方式)
特点:
- 你自己 new
- 你自己管理依赖
- 强耦合
java
UserService service = new UserService();
Spring IOC(现在)
特点:
- 不 new
- 交给 Spring
- 自动注入
java
@Autowired
private UserService userService;
四、IOC容器内部结构(核心)
Spring 启动后会做:=== Map<String, Object> beanFactory
扫描 classpath
↓
创建 Bean 对象
↓
存入 Map<String, Object>
五、Spring 启动时发生了什么?
启动------SpringApplication.run(UserApplication.class)
1️⃣ 创建 IOC 容器
java
ApplicationContext context = new AnnotationConfigApplicationContext()
2️⃣ 扫描包------扫描 com.minishop.user
3️⃣ 找到 Bean
识别:
java
@Controller
@Service
@Repository
@Component
4️⃣ 创建对象(核心)
new UserController()
new UserService()
5️⃣ 放入容器
java
BeanMap.put("userService", userService)
六、@Autowired 是什么?
------❗ 从 IOC 容器里"找对象塞进去"
=== userService = beanFactory.get("userService")
java
@Autowired
private UserService userService;
七、依赖注入(DI)是什么?
IOC 的子概念:
Dependency Injection(依赖注入)
例如:
UserController 依赖 UserService
Spring------ 将 UserService → 注入 UserController
八、为什么不用 new?
因为:
❌ 手动 new 的问题
- 无法统一管理
- 无法做代理(AOP)
- 无法做事务
- 无法做生命周期控制
✅ IOC 的优势
Spring 可以:
- 管理生命周期
- 统一代理(AOP)
- 控制单例
- 控制依赖关系
十一、IOC + MVC 的关系(重点)
IOC = 底层对象工厂
MVC = 使用这些对象处理请求
Spring = 两个系统叠加:
MVC 是"请求流程"
HTTP → Controller → Response
IOC 是"对象管理系统"
Bean创建 + 依赖注入
真正流程:
前端发起
IOC容器提供 UserController
↓
MVC调度执行 hello()
↓
IOC提供 UserService(如果有)
↓
返回 Result
↓
JSON转换
十四、用一句话彻底总结 IOC
IOC = 对象的创建权从程序员交给 Spring 容器