@Autowired和@Resource区别

203 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情

作用

首先我们要知道@Autowired@Resource的作用:自动装配bean。

不知道掘友们还记得不使用注解,怎么配置bean吗?

简介

  • @Resource是JSR-250提供的,它是Java标准,绝大部分框架都支持。
  • @Autowired是Spring提供的,功能强大,但只适用于Spring框架,如果换成了JFinal等其他框架,功能就会失效。

@Resource

其结构如下:

image.png

其中name属性和type属性比较常用。

name属性

image.png

这段注释主要是说当该注解使用在字段上时,默认取字段名,当注解使用在方法上时,默认取javaBeans属性名进行装配。

type属性

image.png 注释和上面的差不多,即在字段上使用,默认取字段的类型,在方法上使用,默认取javaBeans属性的类型。

作用范围

通过其注释可以看出其作用范围:类、成员变量、方法。

image.png

装配方式

  1. 既没指定name,也没指定type,自动按照名称装配,如果没有匹配,则退而按照类型装配,找不到则抛出异常。

  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

  3. 如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。

  4. 如果同时指定了nametype,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

@Autowired

@Autowired的结构如下:

image.png

其结构很简单,只有一个require属性。

require属性

默认值true。值为true时,表示必须注入,如bean不存在则会报错;值为false时,表示bean存在就注入,不存在则不注入。

作用范围

作用范围:成员变量、构造器、方法、参数、注解。

装配方式

  • 按类型装配(默认使用的装配方式)。
  • 按名称装配(结合@Qualifier注解使用)。

@Autowired和@Resource对比

@Autowired@Resource
Spring提供JSR-250提供
默认按照类型装配默认按照名称装配
只有一个属性require(默认true)有七个属性,常用:name、type
作用范围:成员变量、构造器、方法、参数、注解作用范围:类、成员变量、方法