@Resource
和 @Autowired
都是 Java 中用于进行依赖注入的注解,但它们有一些区别和相同点。
相同点:
-
用途:两者都用于实现依赖注入,即通过注解的方式将一个 Bean 注入到另一个 Bean 中,或将容器中的其他资源注入到 Bean 中。
-
自动装配:默认情况下,两者都支持自动装配,可以根据类型进行匹配注入。
区别:
-
来源:
@Resource
是 Java EE 提供的注解,在 javax.annotation 包下,可以用于注入任何 Java EE 管理的对象或者是用户自定义的对象。@Autowired
是 Spring 提供的注解,在 org.springframework.beans.factory.annotation 包下,主要用于注入 Spring 管理的 Bean。
-
注入方式:
@Resource
默认按照 Bean 名称进行装配,如果找不到与名称匹配的 Bean,则按照类型进行匹配。它支持按照名称和类型进行注入。@Autowired
默认按照类型进行装配,如果找不到与类型匹配的 Bean,则会抛出异常。但可以通过@Qualifier
注解配合使用指定 Bean 名称来进行装配。
-
可选性:
@Resource
注解的required
属性默认为 true,表示被注入的 Bean 必须存在,否则会抛出异常。@Autowired
注解默认情况下是必须的,但可以通过将其的required
属性设置为 false 来实现可选注入。
-
所属标准:
@Resource
是 Java EE 的标准注解,因此在一些非 Spring 环境中也可以使用。@Autowired
是 Spring 的特定功能,在纯粹的 Java EE 应用中无法使用。