尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Spring IOC 控制反转

Spring IOC 控制反转
📅 发布时间:2026/7/15 5:39:15

一句话

IOC 是把对象的创建和依赖管理权从代码里转移到了 Spring 容器,开发者不再手动 new 对象和 set 依赖,而是由容器统一管理并注入。


1. 什么是 IOC

传统方式: UserService service = new UserService(); service.setUserDao(new UserDao()); 自己创建对象,自己管理依赖关系 IOC 方式: @Service public class UserService { @Autowired private UserDao userDao; // 容器自动注入 } 对象的创建和依赖关系交给 Spring 容器管理

​**IOC(Inversion of Control,控制反转)**​:对象创建和依赖管理的权力从代码转移到容器。

​**DI(Dependency Injection,依赖注入)**​:IOC 的具体实现方式,容器自动把依赖"注入"到对象中。


2. 容器核心接口

接口特点场景
BeanFactory最基础接口,getBean,懒加载轻量级场景、嵌入式场景
ApplicationContext扩展接口,启动时预实例化单例,集成事件、国际化、AOP绝大多数项目

ApplicationContext 是 BeanFactory 的子接口,功能更全,实际项目中几乎都用它。


3. 核心组件

BeanDefinition: 描述一个 Bean 怎么创建(class 全路径、scope、属性值、依赖关系) 通过 @ComponentScan、@Bean、@Import 等方式产生 是 Spring 容器管理 Bean 的"图纸" BeanFactoryPostProcessor: 在所有 BeanDefinition 加载完毕后、Bean 实例化之前执行 可以修改 BeanDefinition(比如改属性值、改 scope) 典型实现:PropertySourcesPlaceholderConfigurer(解析 ${} 占位符) BeanPostProcessor: 在 Bean 实例化前后做增强 典型实现:AbstractAutoProxyCreator(AOP 代理就在这里生成) @PostConstruct、@Autowired 注入也通过 BeanPostProcessor 实现

三者的执行顺序:

加载 BeanDefinition → BeanFactoryPostProcessor 修改 BeanDefinition → 实例化 Bean → BeanPostProcessor 前置处理(@PostConstruct) → 初始化 → BeanPostProcessor 后置处理(AOP 代理) → Bean 放入容器

4. 依赖注入三种方式

① 构造器注入(推荐) @Autowired public UserService(UserDao userDao) { ... } 优点:依赖不可变,初始化就完整,适合必需依赖 ② Setter 注入 @Autowired public void setUserDao(UserDao userDao) { ... } 优点:可选依赖,灵活 ③ 字段注入(不推荐但最常用) @Autowired private UserDao userDao; 缺点:无法设为 final,依赖关系不透明,不利于测试

@Autowired是 Spring 的注解,按类型注入。@Resource是 JSR-250 的注解,先按名称再按类型注入。


面试回答模板

"IOC 的核心是把对象创建和依赖管理从代码中转移到了 Spring 容器。 开发者通过 @Service、@Component 等注解声明 Bean, 通过 @Autowired 或构造器注入依赖, 容器负责实例化、组装和管理 Bean 的完整生命周期。 容器有两个核心接口:BeanFactory 是最基础的 getBean 接口, ApplicationContext 是扩展接口,支持事件、国际化、AOP。 容器内部通过 BeanDefinition 描述 Bean 的创建方式, BeanFactoryPostProcessor 在实例化前修改定义, BeanPostProcessor 在实例化后做增强,AOP 代理就是在这一步生成的。"

参考来源

  • Day11-Spring 与 SpringBoot
  • 01_Raw【原始素材】/notion 资料/Notion/任务/Spring底层核心原理解析.md

相关新闻

  • 万亿后市场的“油转电”:2026年,传统汽修厂如何接住新能源的“三电维修”红利?
  • 05-04-YooAsset源码-Unity资源定位系统
  • 国科GK7205V300替代海思HI3516EV300:从硬件兼容到软件迁移的完整指南

最新新闻

  • Qt绘图系统:从QPainter基础到高级渲染机制
  • GACCode实战指南:本地化Claude编程工作流搭建
  • 开源3D建模软件FreeCAD核心工作台与实战场景解析
  • 基于MATLAB的和差测角天线方向图优化与仿真实践
  • 大模型时代数据分析速成:SQL与Python语法速成+项目实战
  • 图解MD2:首个互联网哈希算法的前世今生与源码实战

日新闻

  • 告别启动盘残留:用Diskpart彻底清除U盘EFI分区与恢复完整空间
  • 2026 年宜春诚信的塑料缠绕膜厂家哪个好,缠绕膜背后的秘密:你不知道的成本陷阱 - 领域鉴赏官
  • Arch ECS 入门指南:10分钟掌握C#高性能数据驱动架构

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号