重新理解@Resource注解
@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注解相关推荐
- Spring5:@Autowired注解、@Resource注解和@Service注解
转载:http://www.cnblogs.com/xrq730/p/5313412.html 什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有 ...
- Spring中@Autowired注解、@Resource注解的区别
Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...
- @Autowired注解与@resource注解的区别(十分详细)
背景: 今天下班路上看到一个大货车,于是想到了装配,然后脑海里跳出了一个注解@Autowired(自动装配),于是又想到最近工作项目用的都是@Resource注解来进行装配.于是本着学什么东西都要一钻 ...
- 编码实现Spring 利用@Resource注解实现bean的注入,xml实现基本数据类型的注入
首先分析. 1: 肯定要利用dom4j读取xml配置文件,将所有的bean的配置信息读取出来 2: 利用反射技术,实例化所有的bean 3: 写注解处理器, 利用注解和内省实现依赖对象的注入. 4: ...
- Spring中 @Autowired注解与@Resource注解的区别
相同点: @Resource的作用相当于@Autowired,均可标注在字段或属性的setter方法上. 不同点: (1)提供方:@Autowired是由org.springframework.bea ...
- @AutoWired和@Resource注解异同分析
相同点: @AutoWired和@Resource注解都是从Spring容器中取出相应的bean对象,自动装配. 不同点: @AutoWired: 默认根据类型进行自动装配,依赖的对象必须存在,如果允 ...
- java 注解_怎样理解 Java 注解和运用注解编程?
怎样理解 Java 注解和运用注解编程? 注解和使用 先来看下概念首先从注释来看: 注释:给代码添加说明和解释,注释帮助开发人员理解程序.(Comment)说白点就是注释是给人看的. 注解:给代码添加 ...
- @Autowired和@Resource注解的区别?
谈到Spring的注解,@Autowired和@resource这两个注解不得不提.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上 那@A ...
- @Resource注解研究和在SAP Hybris ECP中的应用
Created by Wang, Jerry, last modified on Jul 27, 2016 @Resource 注解被用来激活一个命名资源(named resource)的依赖注入,在 ...
最新文章
- yolov3剪枝 SlimYOLOv3
- VTK:非结构化网格之ClipUnstructuredGridWithPlane2
- 使用浏览器的 Local Storage 真的安全吗?
- 存钱吃利息存邮政储蓄好还是农业银行好?
- Windows部署服务WDS实例
- 金坛区实验幼儿园服务器不稳定,2019年金坛城区部分公办幼儿园服务区划分方案(试行)...
- 2021年四月中旬推荐文章
- Fragstats 4 软件进行景观分析教程
- 第一天:Drools环境搭建配置
- 英语学术论文写作概述
- smartSVN 新建仓库
- Ubuntu系统切换jdk版本
- zoom 用法 flex zoom
- spi通信问题-有波形但无法获取正确数据:MOSI和SCK
- 中级软考有没有必要考?
- 物联网卡设置_物联卡中心:物联网卡这样设置一下上网全程4G,建议收藏!
- 关于android 进程CPU占用率高的原因分析
- 关于 C++ 你应该更新的知识
- mn数组计算java陆地和海洋01,2008年高三地理一轮复习精讲精练四—陆地和海洋
- 推荐几个优秀的开源的项目