一、核心机制
@Autowired注解通过Spring的依赖注入机制实现自动装配,其核心原理基于Bean后置处理器(BeanPostProcessor),具体流程如下:
- 扫描注解:Spring容器启动时,扫描所有被
@Autowired标记的字段、方法或构造器。 - 元数据封装:将这些注解信息封装成
InjectionMetadata对象,记录每个依赖项的类型和注入点(字段/方法)。 - 后置处理:通过
AutowiredAnnotationBeanPostProcessor后置处理器,在Bean实例化后执行属性填充:- 属性填充:在
postProcessProperties方法中,遍历InjectionMetadata,通过反射调用set方法或直接赋值字段,注入匹配的Bean实例。 - 类型匹配:默认按类型匹配依赖Bean,可通过
@Qualifier指定名称匹配。
- 属性填充:在
二、实现细节
- 注解解析:
AutowiredAnnotationBeanPostProcessor继承自InstantiationAwareBeanPostProcessorAdapter,重写了postProcessProperties方法,实现属性注入逻辑。 - 反射操作:通过反射获取目标Bean的字段/方法,调用
set方法或直接赋值字段,完成依赖注入。 - 生命周期:在Bean生命周期的初始化阶段(
initializeBean方法)触发注入操作,确保依赖Bean已实例化。
三、常见用法
- 字段注入:直接在字段上标记
@Autowired,Spring通过反射赋值(不推荐,因难以测试)。 - 构造器注入:推荐使用构造器注入,通过参数自动装配依赖Bean。
- 方法注入:通过
@Autowired标记Setter方法,实现依赖注入。
四、源码关键类
AutowiredAnnotationBeanPostProcessor:核心实现类,负责解析@Autowired注解并执行注入操作。InjectionMetadata:封装注解元数据,记录依赖项信息。
总结:
@Autowired通过Bean后置处理器在Bean初始化阶段自动解析注解并执行依赖注入,核心依赖反射机制和AutowiredAnnotationBeanPostProcessor后置处理器。