当前位置:网站首页>@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属性进行选择性注入
边栏推荐
- Paper Notes: BBN: Bilateral-Branch Network with Cumulative Learning for Long-Tailed Visual Recognition
- 【嵌入式开源库】使用J-Link打印日志,让你节省一个打印串口
- Switch and Router Technology-31-Extended ACL
- Application of Identification Cryptography in IMS Network
- 【电商运营】社交媒体营销策略该如何制定?
- 网络技能树
- 2021年网络规划设计师下午案例题
- HAVE FUN | "SOFA Planet" spacecraft plan, the latest progress of source code analysis activities
- svg-icon的使用方法(svg-sprite-loader插件)
- K8s复习笔记7--Redis单机和Redis-cluster的K8S实现
猜你喜欢
随机推荐
IP-Guard如何禁止运行U盘程序
标识密码技术在 IMS 网络中的应用
[FPGA tutorial case 49] Control case 1 - FPGA-based PID controller verilog implementation
Golden Warehouse Database KingbaseGIS User Manual (6.10. Geometric Object Operation Operator)
-填涂颜色-
智能指针笔记
K8s Review Notes 7--K8S Implementation of Redis Standalone and Redis-cluster
Switch and Router Technology - 28 - NSSA Areas for OSPF
【无标题】2022年胺基化工艺考试题模拟考试题库及在线模拟考试
项目实战第二十七讲:状态模式在重名品牌中的应用
一起Talk编程语言吧
网络技能树
Switch and Router Technology-34-Dynamic NAT
4 Module 3: Literature Reading and Research Methods
Paper Notes: BBN: Bilateral-Branch Network with Cumulative Learning for Long-Tailed Visual Recognition
3 Module 2: Use of scientific research tools
群晖DS220+ 应用小笔记
c语言fprintf、fscanf、sscanf以及sprintf函数知识要点总结
论文笔记:BBN: Bilateral-Branch Network with Cumulative Learningfor Long-Tailed Visual Recognition
Network Skill Tree