【302、说说@Autowired 和 @Resource 的区别是什么?】

282 阅读1分钟

@Autowired 和 @Resource 都是 Spring 框架中常用的依赖注入注解,它们的主要区别在于注入方式和匹配规则:

  1. 注入方式:

@Autowired 注解是按照类型(byType)自动装配的方式进行注入的,也就是说,Spring 容器会查找一个与被注入变量类型相同的 Bean 并将其注入。

@Resource 注解则是按照名称(byName)自动装配的方式进行注入的。默认情况下,它会查找与被注入变量名称相同的 Bean,并将其注入。

  1. 匹配规则:

@Autowired 注解是基于类型进行匹配的,如果 Spring 容器中存在多个与被注入变量类型相同的 Bean,则会抛出异常,需要使用 @Qualifier 注解指定具体的 Bean 名称进行匹配。

@Resource 注解则是基于名称进行匹配的,可以指定具体的 Bean 名称或类型。如果指定了名称,则会查找与名称相同的 Bean 进行匹配;如果指定了类型,则会查找与类型相同的 Bean 进行匹配。

另外,@Autowired 注解是 Spring 提供的,而 @Resource 注解是 JSR-250 提供的标准注解,因此 @Autowired 更加常用。但是,@Resource 注解提供的名称匹配功能在某些场景下也是非常有用的。