当前位置:网站首页>@Resource和@Autowired的区别
@Resource和@Autowired的区别
2022-08-11 05:11:00 【weixin_47088026】
@Resource和@Autowired的区别
spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。
@Resource
@Resource的作用相当于@Autowired,只不过**@Autowired按byType自动注入,而@Resource默认按 byName自动注入**罢了。
@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
@Resource装配顺序
- 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
- 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
- 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
- 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配;
@Autowired
@Autowired按byType自动注入,若指定名称,可通过@Qualifier(“cusInfoService”)注解,一般@Autowired()与@Qualifier一般作为修饰用
@Resource和@Autowired的异同
Resource竟然不是spring框架里的,而Autowired则是spring里面的
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
Autowired只按照类型进行自动装配注入的(如果当Spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在UserDao类型的bean,也会抛出BeanCreationException异常。),不匹配name进行注入。而Resource就比较灵活,默认的话按照name匹配(即示例中的bean的id),Resource可以通过配置它的两个属性:name和type来指定按照类型还是名称注入。
@Autowired () @Qualifier ( "baseDao" )
private BaseDao baseDao;
@Resource (name= "baseDao" )
private BaseDao baseDao;
推荐使用:@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅。
@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
总结:
- @Autowired//默认按type注入,存在同一type多个bean时,会报错
- @Qualifier(“cusInfoService”) //一般作为@Autowired()的修饰用
- @Resource(name=“cusInfoService”) //默认按name注入,可以通过name和type属性进行选择性注入
边栏推荐
- 2021年网络规划设计师下午案例题
- 金仓数据库 KingbaseGIS 使用手册(6.8. 几何对象输入函数)
- HAVE FUN | "SOFA Planet" spacecraft plan, the latest progress of source code analysis activities
- Switch and Router Technology-35-NAT to PAT
- FPGA工程师面试试题集锦121~130
- 【嵌入式开源库】使用J-Link打印日志,让你节省一个打印串口
- Selenium自动化测试框架工作原理你明白了吗?
- K8s Review Notes 7--K8S Implementation of Redis Standalone and Redis-cluster
- [No 2022 Shanghai Security Officer A Certificate Exam Question Bank and Mock Exam
- 交换机和路由器技术-25-OSPF多区域配置
猜你喜欢

Switches and routers technology - 24 - configure OSPF single area

Switch and Router Technology-34-Dynamic NAT

async(异步)和await的使用
![ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '/data/xxxx](/img/02/3896b29a955ae84a0f0326f0d2cabf.png)
ERROR: Could not install packages due to an OSError: [Errno 2] No such file or directory: '/data/xxxx

MySQL must know and must know (primary articles)

嵌入式分享合集33

交换机和路由器技术-29-OSPF虚链路

Optimization is a kind of habit low starting point is the "standing near the critical"

【嵌入式开源库】MultiButton的使用,简单易用的事件驱动型按键驱动模块

分层架构&SOA架构
随机推荐
log4j2漏洞复现以及解决方案
C语言:实用调试技巧
金仓数据库 KingbaseGIS 使用手册(6.8. 几何对象输入函数)
每周推荐短视频:你常用的拍立淘,它的前身原来是这样的!
MySQL事务的概念
Development Tools Lecture 7: Alibaba Cloud Log Query and Analysis
Let's talk programming languages together
交换机和路由器技术-25-OSPF多区域配置
Switches and routers technologies - 30 - standard acls
Kong实现禁止国外IP访问
【嵌入式开源库】MultiTimer 的使用,一款可无限扩展的软件定时器
标识密码技术在 IMS 网络中的应用
-Fill in color-
Layered Architecture & SOA Architecture
Switch and Router Technology-35-NAT to PAT
[FPGA tutorial case 50] Control case 2 - FPGA-based PD controller verilog implementation
About CC Attacks
Jetson Orin platform 4-16 channel GMSL2/GSML1 camera acquisition kit recommended
4 模块三:文献阅读与研究方法
绿盾加密如何顺利切换成IP-Guard加密