一句话IOC 是把对象的创建和依赖管理权从代码里转移到了 Spring 容器开发者不再手动 new 对象和 set 依赖而是由容器统一管理并注入。1. 什么是 IOC传统方式 UserService service new UserService(); service.setUserDao(new UserDao()); 自己创建对象自己管理依赖关系 IOC 方式 Service public class UserService { Autowired private UserDao userDao; // 容器自动注入 } 对象的创建和依赖关系交给 Spring 容器管理​**IOCInversion of Control控制反转**​对象创建和依赖管理的权力从代码转移到容器。​**DIDependency 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 实例化前后做增强 典型实现AbstractAutoProxyCreatorAOP 代理就在这里生成 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 与 SpringBoot01_Raw【原始素材】/notion 资料/Notion/任务/Spring底层核心原理解析.md