@Autowired是Spring专属注解,默认按类型匹配,需@Qualifier指定名称;@Resource是Java标准注解,默认按名称匹配,支持name/type属性,跨框架兼容性更强。

来源不同
@Autowired 是 Spring 框架原生提供的注解,定义在 org.springframework.beans.factory.annotation.Autowired 包下,属于 Spring 生态专属;@Resource 是 Java 标准(JSR-250)定义的注解,来自 javax.annotation.Resource(Java 8 及以前)或 jakarta.annotation.Resource(Jakarta EE 9+),不依赖 Spring,具备跨框架兼容性。
默认匹配策略不同
这是最核心的区别:
-
@Autowired 默认按类型(byType)匹配:先查找容器中所有匹配注入字段/参数类型的 Bean;若找到多个,则进一步按变量名(byName)匹配——比如字段名为
userService,就找名为userService的 Bean。 - @Resource 默认按名称(byName)匹配:先查找与字段名或 setter 方法名同名的 Bean;若找不到,再回退到按类型(byType)匹配。
指定目标的方式不同
当存在多个同类型 Bean 时,需显式指明注入哪一个:
- @Autowired 配合 @Qualifier("beanName") 或标注 @Primary 的 Bean 来限定;
- @Resource 直接通过 name = "beanName" 属性指定,更直观简洁;也可用 type = UserService.class 强制按类型匹配(但较少用)。
支持的属性和适用场景不同
@Autowired 只有 required 属性(默认 true),控制注入失败是否抛异常;@Resource 支持 name、type、lookup 等多个属性,灵活性更高。
立即学习“Java免费学习笔记(深入)”;
团队若倾向标准 Java 注解、重视可移植性(如未来可能迁出 Spring),推荐 @Resource;若项目深度绑定 Spring、强调类型安全与构造器注入实践,@Autowired(尤其配合构造器)更符合 Spring 官方推荐。


















