@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还可以应用于方法参数。