这个问题是平时我们面试时面试官非常喜欢问的一个问题。首先,@Resourse是javax.annother包提供的一个注解关键字,是Java EE的方法,但Spring也支持该注解的导入,而@Autowired是Spring提供的关键字。

  它们的共同点是都是用来装配Java Bean的(这是一句废话哈哈哈),两者都可以写在字段或者是setter方法上,如果加在字段上,那对应的字段就不需要再添加setter方法了。两者也都可以配合@Component关键字来使用,在ApplicationContext.xml加入如下配置后(基包后面根据实际情况填自己需要Spring扫描的包名),可以加在普通pojo类上,效果相当于<Bean id="******" class="*******">,直接将普通的pojo实例化到Spring容器中。

<context:component-scan base-package=”******”> 

  但他们的差异也是显著的。首先,@Resourse关键字是byName的,也就是根据JNDI名称来装配Bean,其不关心Bean的类,例如,Spring想找一个叫做小明的人,@Resourse只会去寻找小明,而它不关心小明到底是一个男人还是一个女人。而@Autowired是byType的,刚好与@Resourse相反,@Autowired只关心Bean的类型,而不关心这个Bean到底叫什么。如果存在多个同样类型的Bean,就会报出BeanCreationException的错误,要解决这个问题,可以修改如下配置,此时@Autowired关键字也会变成byName,但这种方法不是很推荐。

<beans default-autowire="byName"/>

  此处我们应当使用另一种方法,使用@Qualifier关键字,@Qualifier(*****)来让Spring根据Bean的名称来进行装配。此外,@Resourse可以使用复数形式@Resourses来装配多个Bean。

最新文章

  1. Git 简介
  2. 才知道创建数据表的后面int(M)的m居然和存储大小没有关系
  3. LVM磁盘管理
  4. HDU 1175 连连看(BFS)
  5. JDK 高性能编程之容器
  6. jvm原理及调优
  7. asp的RegExp对象正则表达式功能用法
  8. Java Web 高性能开发,第 1 部分: 前端的高性能
  9. c++重要知识点
  10. How to blog on Github
  11. linux相关操作命令
  12. ELK架构设计
  13. Python基础(8)——常见模块
  14. ubuntu18.04配置nvidia docker和远程连接ssh+远程桌面连接(三)
  15. c++ 文件增加#ifndef、#define 和 #endif 语句的意义
  16. Linux学习网站推荐
  17. 2018软工实践—Beta冲刺(6)
  18. vue2.0实现一个模态弹框,内容自定义(使用slot)
  19. BFC的表象认识
  20. 关于group by后为每个分组编号

热门文章

  1. 075-PHP数组添加元素
  2. C# 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。
  3. Docker Ubuntu 例子
  4. date linux系统校正时间
  5. C++基础--string转
  6. mysql字符串操作
  7. JS高级学习笔记(6)- 事件循环
  8. EXCEL排序(hdu 1862)
  9. Tomcat跨域
  10. 2016蓝桥杯省赛C/C++A组第三题 方格填数