@Autowired 和 @Resource 注解对比

2 阅读1分钟

1. @Autowired 注解

来源: Spring 框架提供的注解注入方式:默认按类型注入 (byType)如果有多个相同类型的 Bean,会抛出异常可以配合 @Qualifier 指定具体的 Bean 名称

特点:

  • required 属性默认为 true,找不到 Bean 会抛异常

  • 可以设置 @Autowired(required = false) 允许注入失败

2. @Resource 注解

来源: Java EE 标准注解 (JSR-250)

注入方式:

  • 默认按名称注入 (byName)

  • 如果按名称找不到,再按类型注入

  • 可以通过 name 属性指定 Bean 名称

特点:

  • required 属性默认为 true,找不到 Bean 会抛异常

  • 可以设置 @Autowired(required = false) 允许注入失败

2. @Resource 注解

来源: Java EE 标准注解 (JSR-250)

注入方式:

  • 默认按名称注入 (byName)

  • 如果按名称找不到,再按类型注入

  • 可以通过 name 属性指定 Bean 名称

3. 主要区别对比

特性

@Autowired

@Resource

来源

Spring 框架

Java EE 标准

默认注入方式

按类型 (byType)

按名称 (byName)

多个Bean处理

需要 @Qualifier

通过 name 属性指定

required属性

支持

不支持

适用位置

字段、方法、构造器

字段、方法

4. 针对你的配置类使用建议

推荐使用 @Resource,因为:

  • 明确指定了 Bean 名称,更加清晰

  • 不依赖 Spring 特定注解,更符合标准

  • 避免了类型冲突的问题