@Resource与@Autowired的区别
@Resource
是 JSR-250(Java 标准) 提供的注解,用来完成 “按名称”或“按类型” 的依赖注入。在 Spring 中它也能正常工作,但行为跟 @Autowired
略有区别。
✅ 作用一句话
告诉 Spring:到容器里找一个 StringRedisTemplate 类型的 Bean,并注入给当前字段。
✅ 与 @Autowired
的区别(重点)
特性 | @Resource | @Autowired |
---|---|---|
来源 | JSR-250(Java 标准) | Spring 专用 |
默认方式 | 先按名称,找不到再按类型 | 先按类型,找不到再按名称 |
是否支持 @Qualifier | ❌ 不支持(本身就能指定 name) | ✅ 支持 |
是否支持 @Primary | ❌ 忽略 @Primary | ✅ 受 @Primary 影响 |
✅ 查找规则(详细)
@Resource
private StringRedisTemplate stringRedisTemplate;
- 先按字段名
stringRedisTemplate
去 Spring 容器里找 Bean。 - 如果找不到,再按类型
StringRedisTemplate
去找。 - 如果还找不到,就抛出
NoSuchBeanDefinitionException
。
✅ 显式指定名称(推荐)
如果你想明确指定 Bean 的名字,可以写成:
@Resource(name = "myRedisTemplate")
private StringRedisTemplate stringRedisTemplate;
✅ 总结一句话
@Resource
是 Java 标准的注入注解,默认 先按名称后按类型,在 Spring 项目中与@Autowired
功能类似但行为略不同,适合需要“按名称精确匹配”的场景。