@Resource
和 @Autowired
都是用于依赖注入的注解,但它们有一些区别。
@Resource
注解:
-
来源:
@Resource
是由 JavaEE 提供的注解,它不属于 Spring 框架的一部分。
-
装配方式:
@Resource
默认按照名称进行装配,如果找不到匹配的名称,则按照类型进行装配。- 通过
name
属性可以指定要装配的 bean 的名称。 - 通过
type
属性可以指定要装配的 bean 的类型。
-
可选性:
@Resource
注解中的required
属性默认为true
,表示要求依赖对象必须存在,否则会抛出异常。
-
适用范围:
@Resource
可以应用于字段、setter 方法和构造方法。
@Autowired
注解:
-
来源:
@Autowired
是 Spring 框架提供的注解,用于实现依赖注入。
-
装配方式:
@Autowired
默认按照类型进行装配,如果找不到匹配的类型,则会抛出异常。- 通过
@Qualifier
注解可以指定要装配的 bean 的名称。 - 可以与
@Primary
注解配合使用,以指定首选的 bean。 - 如果需要按名称进行装配,可以结合
@Qualifier
注解使用。
-
可选性:
@Autowired
注解的required
属性默认为true
,表示要求依赖对象必须存在,否则会抛出异常。- 可以将
required
属性设置为false
,表示依赖对象可以为null
。
-
适用范围:
@Autowired
注解可以应用于字段、setter 方法、构造方法以及方法参数。
总结区别:
@Resource
是 JavaEE 的标准注解,而@Autowired
是 Spring 框架提供的注解。@Resource
默认按名称装配,@Autowired
默认按类型装配。@Resource
的required
属性默认为true
,@Autowired
的required
属性默认为true
。@Resource
的使用范围更广泛,可以应用于字段、setter 方法和构造方法,而@Autowired
还可以应用于方法参数。