Spring IOC(Inversion of Control)

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 容器
相关推荐
需要8264 小时前
Spring Bean 生命周期:从实例化到销毁的完整钩子
java·后端·spring
小 黄 鸡4 小时前
HashMap 面试必会知识点详解(JDK 8)
java·面试·职场和发展
伯恩bourne6 小时前
Spring Boot Bean 注册的两种方式:@Component 家族 vs @Configuration + @Bean
java·spring boot·后端
silvamux_6 小时前
curl 测试 OpenAI 兼容 API 的完整流程
java·人工智能·缓存·ai·oneapi
省钱兄--zs6 小时前
深圳24小时自助健身房软硬件解决方案实战指南与开发流程详解
java·数据仓库·spring boot·小程序·架构
顽疲7 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog7 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
用户21296835261687 小时前
开源了一个 Java 多智能体 LLM 框架 Baton:一个依赖,把 Agent 循环、工具调用、记忆、编排全配齐
java·llm
helmsail7 小时前
05 管理活动与选品
java
天远数科7 小时前
Java数据工程:利用天远人车核验加强版优化智慧高速ETC发行合规体验
java·人工智能