当前位置: 首页 > news >正文

spring @Autowired 与@Resource的区别

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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

@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。

@Resource装配顺序
1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;

@Autowired 与@Resource的区别

1、 @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。

2、 @Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

1
2
@Autowired()@Qualifier("baseDao")
privateBaseDao baseDao;

3、@Resource(这个注解属于J2EE的),默认安装名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

1
2
@Resource(name="baseDao")
privateBaseDao baseDao;

推荐使用:@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅。

转载于:https://my.oschina.net/u/184510/blog/93647

相关文章:

  • Server 2008R2创建RDP-TCP连接方式
  • 在无VS开发环境的情况下调用Asp.net网站配置工具{转}
  • WM_NOTIFY消息流程实例分析 .
  • 海洋MP3播放器
  • 层被Flash挡住
  • Dell与Cisco 交换机之间多端口做Port-Channel注意事项
  • HTML5标签及使用方法描述
  • c#开发_Dev的关于XtraGrid的使用(GridControl小结)_First
  • 【JQuery】可直接编辑的表格
  • BE恢复单个邮箱
  • 医疗系统发展分析(转)
  • 在VMware Workstation 9上跑Win2012 HyperV
  • 对TCL/TK的一个小总结
  • httpclient完全支持ssl连接方式
  • 《高效能人士的7种心态》读后感+一年实施结果
  • (三)从jvm层面了解线程的启动和停止
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【前端学习】-粗谈选择器
  • 2017-09-12 前端日报
  • 77. Combinations
  • docker-consul
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JS+CSS实现数字滚动
  • React Transition Group -- Transition 组件
  • Sass Day-01
  • SpringBoot几种定时任务的实现方式
  • SpringCloud集成分布式事务LCN (一)
  • 包装类对象
  • 好的网址,关于.net 4.0 ,vs 2010
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 设计模式(12)迭代器模式(讲解+应用)
  • 深度学习在携程攻略社区的应用
  • 小试R空间处理新库sf
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 《码出高效》学习笔记与书中错误记录
  • 进程与线程(三)——进程/线程间通信
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #pragma once与条件编译
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • #在 README.md 中生成项目目录结构
  • (1)bark-ml
  • (function(){})()的分步解析
  • (TOJ2804)Even? Odd?
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (第一天)包装对象、作用域、创建对象
  • (二)c52学习之旅-简单了解单片机
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (三分钟)速览传统边缘检测算子
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (一)插入排序
  • (原)Matlab的svmtrain和svmclassify
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)德国人的记事本