Spring IoC(控制反转)的实现机制是Spring框架的核心,其本质是将对象的创建、依赖管理和生命周期控制权从应用程序代码转移到容器中。以下是其核心实现机制:
🔧 一、核心实现步骤
-
配置元数据加载
- 容器启动时读取XML/注解/Java配置类,解析为
BeanDefinition对象(包含类名、作用域、依赖关系等元数据) - 示例:
<bean id="userService" class="com.example.UserService"/>或@Service注解
- 容器启动时读取XML/注解/Java配置类,解析为
-
Bean实例化
- 通过反射调用无参构造器或工厂方法创建原始对象
- 底层依赖
BeanWrapper封装反射操作
-
依赖注入(DI)
- 注入方式:
- 构造器注入(强制依赖)
- Setter注入(可选依赖)
- 字段注入(
@Autowired)
- 容器递归解析依赖链,解决循环依赖(三级缓存机制)
- 注入方式:
-
初始化回调
- 执行
Aware接口回调(如BeanNameAware) - 调用
@PostConstruct、InitializingBean.afterPropertiesSet()或init-method
- 执行
-
容器管理
- 单例Bean缓存于
SingletonBeanRegistry - 销毁时触发
@PreDestroy或destroy-method
- 单例Bean缓存于
⚙️ 二、关键组件与接口
| 组件 | 作用 | 源码体现 |
|---|---|---|
BeanDefinition | 存储Bean的配置元数据(类名、作用域等) | RootBeanDefinition |
BeanFactory | 基础容器接口,提供Bean的获取和生命周期管理 | DefaultListableBeanFactory |
ApplicationContext | 扩展容器,集成AOP、事件等高级功能 | ClassPathXmlApplicationContext |
BeanPostProcessor | 在Bean初始化前后插入自定义逻辑(如AOP代理) | AbstractAutoProxyCreator |
BeanDefinitionReader | 解析配置源(XML/注解)为BeanDefinition | XmlBeanDefinitionReader |
🔄 三、依赖注入实现原理
-
构造器注入
- 容器通过反射调用带参构造器,参数值从配置或类型匹配获取
@Service public class UserService { private final UserRepository repository; @Autowired public UserService(UserRepository repository) { this.repository = repository; } } -
Setter注入
- 调用Setter方法前需先实例化对象,适合可选依赖
public class OrderService { private PaymentService paymentService; @Autowired public void setPaymentService(PaymentService paymentService) { this.paymentService = paymentService; } } -
字段注入
- 直接通过反射设置字段值(需
@Autowired标注)
- 直接通过反射设置字段值(需
📊 四、设计思想与优势
- 控制反转:对象创建权交给容器,降低耦合度
- 依赖倒置:通过接口而非实现类定义依赖关系
- 扩展性:
BeanPostProcessor等接口支持功能扩展(如AOP) - 一致性:统一管理Bean的生命周期和配置
🌟 典型应用:
- 单例服务层Bean(无状态设计)
- 原型作用域的DAO对象(线程隔离)
2万+

被折叠的 条评论
为什么被折叠?



