@Resource和@Autowired注解都是用来实现依赖注入的。只是@Autowired按byType自动注入,而@Resource默认按 byName自动注入。
  @Resource有两个重要的属性,分是name和type。
  Spring将name属性解析为bean的名字(最需要重新理解的就是这个bean名字),而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

@Resource依赖注入时查找bean的规则:(以用在field上为例)

1. 既不指定name属性,也不指定type属性,则自动按byName方式进行查找。如果没有找到符合的bean,则回退为一个原始类型进行进行查找,如果找到就注入。
  此时的name是变量名。
错误 示例:

 @Resourceprivate String bucketName;@Resourceprivate String styleName;
此时的name值是配置bean里的name属性指定的值,而不是id的值
 <bean id="bucketName " class="java.lang.String"><constructor-arg value="${oos.bucketName}"/></bean><!-- 图片样式名 --><bean id="styleName " class="java.lang.String"><constructor-arg value="${oos.styleName}"/></bean>
这里为什么要重新理解,是因为之前我一直认为对应的是配置文件的id属性的值,直到在配置上面两个String类型的bean的时候,居然会报错,如下:
No qualifying bean of type [java.lang.String] is defined: expected single matching bean but found 2: bucketName,styleName
这是因为spring会去找bean元素里name属性值和变量名一致的bean,但是因为都没有指定name属性,所以找不到然后就按照原始类型String去查找,结果一下找到了两个,所以就报错。

2. 只是指定了@Resource注解的name,则按name后的名字去bean元素里查找有与之相等的name属性的bean。
  
正确示例

 @Resource(name="bucket")private String bucketName;@Resource(name="style")private String styleName;
 <bean name="bucket" class="java.lang.String"><constructor-arg value="${oos.bucketName}"/></bean><!-- 图片样式名 --><bean name="style" class="java.lang.String"><constructor-arg value="${oos.styleName}"/></bean>

3. 只指定@Resource注解的type属性,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 既指定了@Resource的name属性又指定了type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常

重新理解@Resource注解相关推荐

  1. Spring5:@Autowired注解、@Resource注解和@Service注解

    转载:http://www.cnblogs.com/xrq730/p/5313412.html 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有 ...

  2. Spring中@Autowired注解、@Resource注解的区别

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

  3. @Autowired注解与@resource注解的区别(十分详细)

    背景: 今天下班路上看到一个大货车,于是想到了装配,然后脑海里跳出了一个注解@Autowired(自动装配),于是又想到最近工作项目用的都是@Resource注解来进行装配.于是本着学什么东西都要一钻 ...

  4. 编码实现Spring 利用@Resource注解实现bean的注入,xml实现基本数据类型的注入

    首先分析. 1: 肯定要利用dom4j读取xml配置文件,将所有的bean的配置信息读取出来 2: 利用反射技术,实例化所有的bean 3: 写注解处理器, 利用注解和内省实现依赖对象的注入. 4: ...

  5. Spring中 @Autowired注解与@Resource注解的区别

    相同点: @Resource的作用相当于@Autowired,均可标注在字段或属性的setter方法上. 不同点: (1)提供方:@Autowired是由org.springframework.bea ...

  6. @AutoWired和@Resource注解异同分析

    相同点: @AutoWired和@Resource注解都是从Spring容器中取出相应的bean对象,自动装配. 不同点: @AutoWired: 默认根据类型进行自动装配,依赖的对象必须存在,如果允 ...

  7. java 注解_怎样理解 Java 注解和运用注解编程?

    怎样理解 Java 注解和运用注解编程? 注解和使用 先来看下概念首先从注释来看: 注释:给代码添加说明和解释,注释帮助开发人员理解程序.(Comment)说白点就是注释是给人看的. 注解:给代码添加 ...

  8. @Autowired和@Resource注解的区别?

    谈到Spring的注解,@Autowired和@resource这两个注解不得不提.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上 那@A ...

  9. @Resource注解研究和在SAP Hybris ECP中的应用

    Created by Wang, Jerry, last modified on Jul 27, 2016 @Resource 注解被用来激活一个命名资源(named resource)的依赖注入,在 ...

最新文章

  1. yolov3剪枝 SlimYOLOv3
  2. VTK:非结构化网格之ClipUnstructuredGridWithPlane2
  3. 使用浏览器的 Local Storage 真的安全吗?
  4. 存钱吃利息存邮政储蓄好还是农业银行好?
  5. Windows部署服务WDS实例
  6. 金坛区实验幼儿园服务器不稳定,2019年金坛城区部分公办幼儿园服务区划分方案(试行)...
  7. 2021年四月中旬推荐文章
  8. Fragstats 4 软件进行景观分析教程
  9. 第一天:Drools环境搭建配置
  10. 英语学术论文写作概述
  11. smartSVN 新建仓库
  12. Ubuntu系统切换jdk版本
  13. zoom 用法 flex zoom
  14. spi通信问题-有波形但无法获取正确数据:MOSI和SCK
  15. 中级软考有没有必要考?
  16. 物联网卡设置_物联卡中心:物联网卡这样设置一下上网全程4G,建议收藏!
  17. 关于android 进程CPU占用率高的原因分析
  18. 关于 C++ 你应该更新的知识
  19. mn数组计算java陆地和海洋01,2008年高三地理一轮复习精讲精练四—陆地和海洋
  20. 推荐几个优秀的开源的项目

热门文章

  1. 491. 递增子序列(回溯算法)
  2. irq domain介绍和代码导读
  3. etcd - 一个分布式一致性键值存储系统
  4. C语言用指针求两个矩阵的差,求破C语言用指针和函数求转置矩阵
  5. 深入分析H2数据库控制台中无需身份验证的RCE漏洞
  6. 红队攻防之从边界突破到漫游内网(无cs和msf)
  7. 在word中粘贴代码保持高亮
  8. Linux之xargs
  9. python网站开发实例视频_Python实战-让在职教育类网站的视频全自动播放
  10. Java跨平台实现原理及JVM垃圾回收、内存管理实战