1.使用场景

@Resource和@Autowired都是做bean注入时使用

@Resource是jdk的注解,不是spring的注解;由包javax.annotation.Resource提供,需要导入,但是Spring支持该注解注入

2.相同点,不同点

共同点:两者都可以写在setter方法,和字段上,不需要再写setter方法

不同点:

2.1 @Autowired是spring提供的注解,只按照byType注入

public class TestServiceImpl {
// 下面两种@Autowired只要使用一种即可
@Autowired
private UserDao userDao; // 用于字段上 @Autowired
public void setUserDao(UserDao userDao) { // 用于属性的方法上
this.userDao = userDao;
}
}

Autowired是按照类型byType装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置required属性值为false。如果想按照名称(byName)来装配,可以结合Qualifier注解一起使用

(通过类型匹配多个candidate,在没有Qualifier的情况下,会使用对象名作为最后的fallback匹配)

public class TestServiceImpl {
@Autowired
@Qualifier("userDao")
private UserDao userDao;
}

2.2 @Resource

Resource默认是按照ByName自动注入的,@Resource有两个属性:name和type

spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型

如果使用name属性,使用byName自动注入策略,而使用 type属性时则使用byType自动注入策略

如果既不指定name也不指定type属性,这是将通过反射机制使用byName自动注入策略

public class TestServiceImpl {
// 下面两种@Resource只要使用一种即可
@Resource(name="userDao")
private UserDao userDao; // 用于字段上 @Resource(name="userDao")
public void setUserDao(UserDao userDao) { // 用于属性的setter方法上
this.userDao = userDao;
}
}

@Resource装配顺序:

①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

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

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

④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。


在启动spring的时候,首先要启动容器;

启动spring容器时,会默认寻找容器扫描范围内的可加载bean,然后查找哪些bean上的属性和方法上有@Resource注解;

找到@Resource注解后,判断@Resource注解括号中的name属性是否为空,如果为空:看spring容器中的bean的id与@Resource要注解的那个变量属性名是否相同,如相同,匹配成功;如果不相同,看spring容器中bean的id对应的类型是否与@Resource要注解的那个变量属性对应的类型是否相等,若相等,匹配成功,若不相等,匹配失败。

如果@Resource注解括号中的name属性不为空,看name的属性值和容器中的bean的id名是否相等,如相等,则匹配成功;如不相等,则匹配失败。

Resource和Autowired区别的更多相关文章

  1. @Resource和@Autowired区别

    @Resource和@Autowired都是做bean的注入时使用 历史:  @Autowired     属于Spring的注解    org.springframework.beans.facto ...

  2. Spring注解@Resource和@Autowired区别对比

    转载:http://www.cnblogs.com/think-in-java/p/5474740.html @Resource和@Autowired都是做bean的注入时使用,其实@Resource ...

  3. 注解@Resource和@Autowired区别对比

    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Sprin ...

  4. Spring注解@Resource和@Autowired区别对比、spring扫描的默认bean的Id、程序获取spring容器对象

    -------------------------注解扫面的bean的ID问题-------------------------- 0.前提需要明白注解扫描出来的bean的id默认是类名首字母小写,当 ...

  5. 【转载】Spring注解@Resource和@Autowired区别对比

    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Sprin ...

  6. [spring]@Resource和@Autowired区别对比

    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Sprin ...

  7. @Resource 和 @Autowired 区别

    spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...

  8. @Resource与@Autowired区别

    每次理解清楚,过段时间就忘了,还是记一下,方便之后再回看. @ Autowired 是spring提供,包含3种自动装配Bean形式 1.@Autowired默认按类型byType匹配,自动装配Bea ...

  9. @Resource 和@Autowired区别

    @Autowired 该注解是由spring提供的 按照类型注入 public class UserService { @Autowired private UserDao userDao; } 这样 ...

随机推荐

  1. php 二维数组排序详解: array_multisort

      定义和用法 array_multisort() 函数返回一个排序数组.您可以输入一个或多个数组.函数先对第一个数组进行排序,接着是其他数组,如果两个或多个值相同,它将对下一个数组进行排序. 注释: ...

  2. hdu2482 字典树+spfa

    题意:       给你一个地图,地图上有公交站点和路线,问你从起点到终点至少要换多少次公交路线. 思路:       首先上面的题意说的和笼统,没说详细是因为这个题目叙述的很多,描述起来麻烦, 下面 ...

  3. thymeleaf中[[${}]]与[(${})]的区别

    [[-]]会被转义,[(-)]不会. 假设在后台传入msg的值为 <b>AAA</b> 在前台这样使用 [[${msg}]]___[(${msg})] 展示效果 官方参考文档

  4. Mac 右键强化工具-超级右键

    App Store 功能介绍 1.新建文件 默认支持新建:TXT/RTF/XML/Word/Excel/PPT/WPS文字/WPS表格/WPS演示/Pages/Numbers/keynote/Ai/P ...

  5. Pycharm集成码云,图文手把手教学!

    Pycharm集成码云 码云(http://gitee.com)是开源中国推出的代码托管平台,支持 Git 和 SVN,提供免费的私有仓库托管 可以通过码云保管你的代码,每次修改完代码提交,就是一个版 ...

  6. 基于任务的异步编程(Task,async,await)

    这节讲一下比较高级的异步编程用法Task,以及两个异步关键字async和await. Task是在C#5.0推出的语法,它是基于任务的异步编程语法,是对Thread的升级,也提供了很多API,先看一下 ...

  7. VS2019解决X64无法内联汇编的问题

    策略:VC编译器x64平台不支持内联汇编,我们利用在Source文件中直接添加asm文件,直接在asm文件中写汇编代码,然后将asm文件编译为OBJ文件.然后就可以在c++文件中声明asm文件中的函数 ...

  8. 教你用SQL实现统计排名

    前言: 在某些应用场景中,我们经常会遇到一些排名的问题,比如按成绩或年龄排名.排名也有多种排名方式,如直接排名.分组排名,排名有间隔或排名无间隔等等,这篇文章将总结几种MySQL中常见的排名问题. 创 ...

  9. PTA 第三章 栈与队列

    一.判断题 1.若一个栈的输入序列为1,2,3,--,N,输出序列的第一个元素为i,则第j个输出的元素是j-i-1    (×)解析:应该是不确定的,不能保证数字出栈后不会再入栈 2.所谓" ...

  10. Think on 小黄衫

    忙忙碌碌的大三下,抽空写一篇这样的感想,感觉也是蛮不错的. 首先,还是要非常感谢课程组的认可与鼓励,能够得到这样的一件"小黄衫",确实是一段非常宝贵的体验. 博客作业感想 三次博客 ...