Spring 中 @Autowired 和 @Resource 的区别
两个依赖注入注解的区别
在 Spring 中,@Autowired
和 @Resource
注解都可以用来实现依赖注入,两者的不同点如下:
- 来源不同
@Autowired
是 Spring 提供的注解@Resource
是 Java EE 提供的注解
- 依赖查找顺序不同
@Autowired
会先根据类型查找,如果根据类型查找不到或者查找到多个 Bean,则会根据名称进行查找@Resource
会先根据名称查找,如果根据名称查找不到,则会根据类型进行查找,如果最后查找不到,则会报错
- 支持的参数不同
@Autowired
只支持required
参数@Resource
支持name
和type
等 7 个参数
- 依赖注入的方式不同
@Autowired
支持构造方法注入、属性注入、Setter 注入@Resource
只支持属性注入和 Setter 注入
- 编译器提示不同
- 在 IntelliJ IDEA 中,
@Autowired
提供了更好的 IDE 提示 - 在 IntelliJ IDEA 中,
@Resource
的 IDE 提示相对较弱
- 在 IntelliJ IDEA 中,
- 使用细节不同
@Autowired
可以配合@Qualifier
一起使用,用于指定具体要注入的 Bean 的名称- 当
@Autowired
查找到多个符合类型的 Bean 时,可以使用@Primary
修饰特定的 Bean,这样该 Bean 就会被优先用来注入 - 在默认情况下,
@Autowired
要求依赖对象必须存在,如果需要允许 Null 值,可以设置它的required
属性为false
总结
一般来说,@Autowired
更常用一些,因为它支持根据类型和名称进行自动装配,并且可以结合 @Qualifier
注解使用,而 @Resource
注解主要用于 Java EE 环境,例如 EJB 容器。