一、注解的作用

@Autowired和@Resource都是用来实现Bean的自动注入功能。

二、@Autowired和@Resource的区别

1、所属的包不同

  • @Autowired是Spring的注解。
  • @Resource是JSR-250的注解。

IDEA 有时候会在 @Autowired 注解上面提示Field injection is not recommended (字段注入是不被推荐的)这个警告,虽然并不属于报错,但是确实是警告的存在。

就是因为@Autowired是Spring提供的,它是特定IoC提供的特定注解,这就导致了应用与框架的强绑定,一旦换用了其他的IoC框架,是不能够支持注入的。

而 @Resource是 Java 自己提供的,它是Java标准,所以它是与框架无关的。

2、依赖注入的支持不同

  • @Autowired能够用在构造函数、setter方法、属性上。
  • @Resource只能用在setter方法、属性上。

3、注入的默认类型不同

依赖注入功能,是先在容器中查找需要的对象,再将对象注入到当前类中。

查找的方式有两种:

  • byType:根据类型注入,如果容器中有多个相同类型的bean,则注入失败。
  • byName:根据名称注入,如果容器中有多个相同名称的bean,则注入失败。

@Autowired和@Resource都用到了byType和byName两种方式,但二者的使用顺序却不同。

@Autowired默认按类型注入,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false。

如果根据类型找不到合适的bean,则会抛出异常。

如果根据类型找到了多个bean,则再根据bean的名称进行匹配,如果匹配成功,则注入成功;如果匹配失败,则抛出异常。

@Autowired自动注入顺序流程图:

@Resource默认按名称注入,如果按名称注入找不到合适的bean,则再按类型注入。

@Resource自动注入顺序流程图:

也就是:

  • @Autowired默认先根据类型查找,如果找到多个,再根据名称查找;
  • @Resource默认先根据名称查找,如果找不到,再按类型查找。

三、总结

在Spring项目中,这两个注解一般可以互相替换。

主要是要了解它们的注入顺序。

@Autowired和@Resource有哪些区别的更多相关文章

  1. 面试突击78:@Autowired 和 @Resource 有什么区别?

    @Autowired 和 @Resource 都是 Spring/Spring Boot 项目中,用来进行依赖注入的注解.它们都提供了将依赖对象注入到当前对象的功能,但二者却有众多不同,并且这也是常见 ...

  2. Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理

    一.spring依赖注入使用方式 @Autowired是spring框架提供的实现依赖注入的注解,主要支持在set方法,field,构造函数中完成bean注入,注入方式为通过类型查找bean,即byT ...

  3. @Autowired和@Resource注解的区别

    @Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false.如果我们想使用按名称装配,可以结合@Qualifier注 ...

  4. @Autowired、@Resource、@Qualifier区别

    @Autowired 1.属于spring的注解,如果不想和Spring耦合的太紧,就不推荐使用. 2.默认情况下,要求依赖对象必须存在,不能为null.如果允许为空,那么设置属性值required为 ...

  5. java @Autowired与@Resource的区别

    @Autowired与@Resource的区别     1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2.@Autowired默认 ...

  6. Spring中@Autowired注解、@Resource注解的区别

    Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...

  7. Spring 注释 @Autowired 和@Resource 的区别

    Spring 注释 @Autowired 和@Resource 的区别 一. @Autowired和@Resource都可以用来装配bean,都可以写在字段上,或者方法上. 二. @Autowired ...

  8. 转:Spring中@Autowired注解、@Resource注解的区别

    Pay attention: When using these annotations, the object itself has to be created by Spring context. ...

  9. @Autowired标签与 @Resource标签 的区别

    Spring不但支持自己定义的@Autowired注解,还支持由JSR-250规范定义的几个注解,如:@Resource. @PostConstruct及@PreDestroy. 1. @Autowi ...

  10. @Autowired和@Resource注解的一个意外重要区别

    今天上午,因为公司要跟客户展示最近开发的项目,然后安排了我重新构建一个template项目,用来向客户展示参考.基于已开发好的代码,我在进行一些简化抽取的时候出现了一个有趣的问题 因为我们有一个spr ...

随机推荐

  1. DP-Modeler三维修模软件简介

    图像快速建模系统DP-Modeler是天际航自主研发的一款集精细化单体建模及Mesh网格模型修饰于一体的新型软件.通过特有的摄影测量算法,支持航测摄影.无人机影像.地面影像.车载影像.激光点云等多数据 ...

  2. 密码学—凯撒密码Python程序

    文章目录 凯撒密码来源 加密算法 解密算法 凯撒密码来源 古典密码,且属于单表加密 凯撒密码又称恺撒变换.变换加密,凯撒是当时罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系.(当然 ...

  3. 精准管控|AIRIOT数字油库智能化解决方案

      在油库管理的过程中,储油罐区普遍存在分布空间范围广.安全防爆要求高.监控点多.布线复杂.自动化系统集成难度大等问题,传统的油库管理手段相对落后.管理环境复杂,企业在监测监控.设备设施管理.日常运行 ...

  4. 深入Django项目实战与最佳实践

    title: 深入Django项目实战与最佳实践 date: 2024/5/19 21:41:38 updated: 2024/5/19 21:41:38 categories: 后端开发 tags: ...

  5. 如何利用 Seaborn 实现高级统计图表

    本文分享自华为云社区<使用 Seaborn 实现高级统计图表从箱线图到多变量关系探索> ,作者:柠檬味拥抱. 在数据科学和数据可视化领域,Seaborn 是一个备受欢迎的 Python 可 ...

  6. 搭建一套完整的ELK系统

    ELK日志收集系统介绍   一  简单介绍 ELK部署搭建有很多成型的方案,这里推荐一种比较中规中矩的方案,它整合了logstash比较消耗资源以及当服务端临时宕机的时候出现数据丢失的问题,主要由fi ...

  7. Android 13 - Media框架(17)- OpenMax(五)

    关注公众号免费阅读全文,进入音视频开发技术分享群! 这一节最后来了解 OMX_Video.h 以及 OMX_Audio.h 中的内容 1.OMX_Video.h 这里只了解该文件中的 OMX_VIDE ...

  8. minio-搭建个人云存储服务

    相信风靡全球的亚马逊 AWS S3 的存储云服务大家已经耳熟能详了,如何自己搭建一个私有的S3存储云服务呢?Minio 提供对象存储服务,兼容了 AWS S3 存储协议,用于非结构化的数据存.非结构化 ...

  9. 7.21考试总结(NOIP模拟22)[d·e·f]

    你驻足于春色中,于那独一无二的春色之中. 前言 首先,这套题的暴力分数十分丰厚,大概是 81+89+30=200 . T1 的特殊性质比较多,也都很好想,于是考场 81pts 是没有问题的. T2 暴 ...

  10. vmware vmnat1和vmnat8在真机网络适配器中消失

    在真机的网络适配器中,发现只有两张网卡.缺少vmnat1和vmnat8 一,查看虚拟网络编辑器是否连接 二,如果没有连接,勾选连接就好了. 三,如果连接了,真机网络适配器仍然只有两张网络适配器. 1. ...