Spring依赖注入注解处理器
Spring框架提供了多种依赖注入的方式,其中常用的注解包括@Resource
和@Autowired
。这些注解分别由不同的处理器完成解析和注入工作。
@Resource注解处理器
- 处理器名称:
CommonAnnotationBeanPostProcessor
- 来源:
@Resource
是JSR-250规范定义的标准Java注解 - 工作原理:
- 识别bean中带有
@Resource
注解的字段或方法 - 优先根据注解中指定的name属性查找匹配的Bean
- 如果未指定name,则使用字段名或方法参数名作为Bean名称查找
- 如果按名称未找到,则回退到按类型查找
- 将找到的依赖对象注入到对应的字段或方法中
@Autowired注解处理器
- 处理器名称:
AutowiredAnnotationBeanPostProcessor
- 来源:
@Autowired
是Spring框架自定义的注解 - 工作原理:
- 识别带有
@Autowired
注解的字段、方法和构造函数 - 优先按类型查找匹配的依赖对象
- 如果找到多个类型匹配的Bean,则使用
@Qualifier
注解或按名称进行筛选 - 根据
required
属性决定是否允许依赖为空 - 将找到的依赖对象注入到对应的字段、方法或构造函数中
- 同时还负责处理
@Value
注解,用于注入配置属性值
两种注解的主要区别
| 特性 | @Resource | @Autowired |
|——|———–|————|
| 规范来源 | Java标准JSR-250 | Spring框架自定义 |
| 默认匹配策略 | 按名称 | 按类型 |
| 处理器 | CommonAnnotationBeanPostProcessor | AutowiredAnnotationBeanPostProcessor |
| 配合注解 | 无需其他注解配合 | 可配合@Qualifier细化注入 |
| 适用范围 | 字段、方法 | 字段、方法、构造函数、参数 |