
1、来源不同
- @Autowired:
- 是 Spring 框架提供的注解。
- 属于 Spring 的专有注解。
- @Resource:
- 是 Java 标准注解(JSR-250)。
- 属于 Java EE 的一部分,不依赖于 Spring。
2、默认注入方式
- @Autowired:
- 默认按 类型(byType) 注入。
- 如果找到多个相同类型的 Bean,会抛出 NoUniqueBeanDefinitionException。
- 可以通过 @Qualifier 注解指定 Bean 名称来按名称注入。
- @Resource:
- 默认按 名称(byName) 注入。
- 如果未指定名称,则会退回到按类型注入。
- 可以通过 name 属性指定 Bean 名称。
3、注入规则
- @Autowired:
- 按类型注入时,如果字段或参数名称与 Bean 名称一致,会优先按名称注入。
- 支持构造器注入、Setter 注入和字段注入。
- @Resource:
- 按名称注入时,会查找与字段或参数名称一致的 Bean。
- 如果未找到,则退回到按类型注入。
- 仅支持字段注入和 Setter 注入,不支持构造器注入。
4、依赖关系
- @Autowired:
- 依赖于 Spring 框架。
- 需要 Spring 容器支持。
- @Resource:
- 不依赖于 Spring 框架。
- 可以在任何支持 JSR-250 的容器中使用。
5、使用场景
- @Autowired:
- 适用于 Spring 项目。
- 推荐使用构造器注入(Spring 官方推荐)。
- @Resource:
- 适用于需要兼容 Java EE 标准的项目。
- 如果需要按名称注入,且不想依赖 Spring,可以使用 @Resource。
特性 |
@Autowired |
@Resource |
来源 |
Spring 框架 |
Java 标准(JSR-250) |
默认注入方式 |
按类型(byType) |
按名称(byName) |
支持注入方式 |
构造器、Setter、字段 |
Setter、字段 |
依赖框架 |
依赖于 Spring |
不依赖于 Spring |
解决冲突方式 |
使用 @Qualifier |
使用 name属性 |
推荐使用场景 |
Spring 项目 |
需要兼容 Java EE 标准的项目 |