1. 什么是IoC与DI
在传统Java开发中,对象通常自己负责创建和管理所依赖的其他对象。比如一个订单服务需要调用支付服务,就会直接在代码里new一个支付服务实例。这种强耦合的方式会导致很多问题:
java复制public class OrderService {
// 传统方式:自己创建依赖对象
private PaymentService paymentService = new PaymentServiceImpl();
public void createOrder() {
paymentService.processPayment();
}
}
IoC(控制反转)是一种设计原则,它将对象的创建和依赖管理权从对象内部转移到外部容器。就像把家里的电器维修工作从自己动手改为找专业维修工一样。Spring框架就是这样一个"维修工",它负责:
- 创建对象
- 管理对象生命周期
- 处理对象间的依赖关系
DI(依赖注入)是IoC的具体实现方式。就像给病人打针一样,把依赖"注射"到需要的地方。Spring支持三种主要注入方式:
- 构造器注入:通过构造函数参数注入
- Setter注入:通过setter方法注入
- 字段注入:直接通过反射注入字段
提示:Spring官方推荐使用构造器注入,因为它能保证依赖不可变且完全初始化,同时便于单元测试。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Spring IoC容器的核心机制
2.1 BeanDefinition解析
Spring容器启动时,会先解析所有Bean的定义信息,形成BeanDefinition对象。这个过程就像建筑师先看图纸再盖房子:
java复制public interface BeanDefinition {
String getBeanClassName(); // 类全限定名
String getScope(); // 作用域
boolean isLazyInit(); // 是否延迟加载
// 其他元数据...
}
BeanDefinition的来源有三种:
- XML配置:
标签解析 - Java配置:@Bean方法解析
3
