当前位置:网站首页>Autowired注解与Resource注解的区别
Autowired注解与Resource注解的区别
2022-08-02 03:35:00 【m0_67390969】
两者的用法
其实这两个注解的作用都一样,都是在做bean的注入,在使用过程中,两个注解有时候可以替换使用.
两者的共同点
- @Resource注解和@Autowired注解都可以用作bean的注入.
- 在接口只有一个实现类的时候,两个注解可以互相替换,效果相同.
两者的不同点
- @Resource注解是Java自身的注解,@Autowired注解是Spring的注解.
- @Resource注解有两个重要的属性,分别是name和type,如果name属性有值,则使用byName的自动注入策略,将值作为需要注入bean的名字,如果type有值,则使用byType自动注入策略,将值作为需要注入bean的类型.如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。即@Resource注解默认按照名称进行匹配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名,按照名称查找,当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
- @Autowired注解是spring的注解,此注解只根据type进行注入,不会去匹配name.但是如果只根据type无法辨别注入对象时,就需要配合使用@Qualifier注解或者@Primary注解使用.
案例
如上图所示,有一个UserService接口,同时创建了两个此接口的实现类,然后用UserController类来测试两个注解的不同用法. 注意如果接口只有一个实现类,就两个注解可以相互替换,效果相同.
1.只使用Autowired注解

可以明显看到报错信息,大概意思是说接口有超过两个实现类,不知道你要注入哪一个.
2.Autowired注解与Qualifier注解一起使用

你上面不是不知道我要注入哪一个bean嘛,我现在指定了bean的名字,你老老实实给我注入进来吧.
3.使用Resource注解,但未设置name属性

虽然此时不报错,但是启动之后控制台会有报错信息,关键信息如下:
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'cn.tedu.sp01.service.UserService' available: expected single matching bean but found 2: userServiceImpl01,userServiceImpl02

反正就是不能注入此类型的bean.
4.使用@Resource注解,并设置了name属性

启动之后,未有报错.
总结
如上面的例子,一个接口,俩个实现类,Autowired就不知道注入哪一个实现类(得与@Qualifier注解搭配使用才知道),而Resource有name属性,可以区分要注入哪一个实现类。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
随机推荐
QT+OPENCV+FFTW内存问题
change file extension
rtsp转flv
对周期内时间段是否重叠进行校验
unity学习(五):Excel表格读取和数据类生成
剑指Offer 13.机器人的运动范围 深度优先遍历
flasgger手写phpwind接口文档
The slave I/O thread stops because master and slave have equal MySQL server ids
Nest.js框架项目初始化实践
剑指Offer 47.礼物的最大值 动态规划
最长连续不重复子序列 双指针
跨域问题解决办法
samba,nfs,iscsi网络文件系统
KMP 字符串匹配
Laptop charging problems
JS事件循环机制
Mysql数据库入门 (基础知识点 由来 各种指令 如何运用)
企业级的dns服务器的搭建
flv文件结构解析
改变文件的扩展名










