@Autowired和@Resourse关键字的区别
这个问题是平时我们面试时面试官非常喜欢问的一个问题。首先,@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。
最新文章
- Git 简介
- 才知道创建数据表的后面int(M)的m居然和存储大小没有关系
- LVM磁盘管理
- HDU 1175 连连看(BFS)
- JDK 高性能编程之容器
- jvm原理及调优
- asp的RegExp对象正则表达式功能用法
- Java Web 高性能开发,第 1 部分: 前端的高性能
- c++重要知识点
- How to blog on Github
- linux相关操作命令
- ELK架构设计
- Python基础(8)——常见模块
- ubuntu18.04配置nvidia docker和远程连接ssh+远程桌面连接(三)
- c++ 文件增加#ifndef、#define 和 #endif 语句的意义
- Linux学习网站推荐
- 2018软工实践—Beta冲刺(6)
- vue2.0实现一个模态弹框,内容自定义(使用slot)
- BFC的表象认识
- 关于group by后为每个分组编号