持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
作用
首先我们要知道@Autowired和@Resource的作用:自动装配bean。
不知道掘友们还记得不使用注解,怎么配置bean吗?
简介
@Resource是JSR-250提供的,它是Java标准,绝大部分框架都支持。@Autowired是Spring提供的,功能强大,但只适用于Spring框架,如果换成了JFinal等其他框架,功能就会失效。
@Resource
其结构如下:
其中name属性和type属性比较常用。
name属性
这段注释主要是说当该注解使用在字段上时,默认取字段名,当注解使用在方法上时,默认取javaBeans属性名进行装配。
type属性
注释和上面的差不多,即在字段上使用,默认取字段的类型,在方法上使用,默认取javaBeans属性的类型。
作用范围
通过其注释可以看出其作用范围:类、成员变量、方法。
装配方式
-
既没指定
name,也没指定type,自动按照名称装配,如果没有匹配,则退而按照类型装配,找不到则抛出异常。 -
如果指定了
name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。 -
如果指定了
type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。 -
如果同时指定了
name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
@Autowired
@Autowired的结构如下:
其结构很简单,只有一个require属性。
require属性
默认值true。值为true时,表示必须注入,如bean不存在则会报错;值为false时,表示bean存在就注入,不存在则不注入。
作用范围
作用范围:成员变量、构造器、方法、参数、注解。
装配方式
- 按类型装配(默认使用的装配方式)。
- 按名称装配(结合
@Qualifier注解使用)。
@Autowired和@Resource对比
| @Autowired | @Resource |
|---|---|
| Spring提供 | JSR-250提供 |
| 默认按照类型装配 | 默认按照名称装配 |
| 只有一个属性require(默认true) | 有七个属性,常用:name、type |
| 作用范围:成员变量、构造器、方法、参数、注解 | 作用范围:类、成员变量、方法 |