当前位置:网站首页>Autowired注解与Resource注解的区别
Autowired注解与Resource注解的区别
2022-08-03 05:30:00 【web13985085406】
两者的用法
其实这两个注解的作用都一样,都是在做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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- IFM network detailed explanation and torch reproduction
- WinServer2012r2破解多用户同时远程登录,并取消用户控制
- 高密度 PCB 线路板设计中的过孔知识
- Command errored out with exit status 1类似问题解决方案
- QT 连续生成指定范围内不重复的随机值
- 【干货分享】PCB 板变形原因!不看不知道
- 【英语单词】常见深度学习中编程用到的英语词汇
- 【云原生 · Kubernetes】Kubernetes基础环境搭建
- Multi-Head-Attention原理及代码实现
- PostMan测试接口-----上传文件、导出excel
猜你喜欢
随机推荐
El - table column filter functions, control columns show and hide (effect and easy to implement full marks)
nvm 卸载详细流程
Shell脚本--信号发送与捕捉
配置MSTP功能示例
IPV4地址详解
【OpenStack云平台】搭建openstack云平台
2021-06-20
MySQL的安装(详细教程)
信息学奥赛一本通T1453:移动玩具
一篇文章教你写扫雷(c语言基础版)
【英语单词】常见深度学习中编程用到的英语词汇
nacos-2.0.3启动报错出现no datasource set的坑
【Markdown 数学公式】markdown常用公式写法
【项目案例】配置小型网络WLAN基本业务示例
ES6中 async 函数、await表达式 的基本用法
Command errored out with exit status 1类似问题解决方案
MySQL的触发器
关于Attention的超详细讲解
pyspark df 二次排序
Content type ‘applicationx-www-form-urlencoded;charset=UTF-8‘ not supported“【已解决】










