@Autowired和@Resource有哪些区别
一、注解的作用
@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有哪些区别的更多相关文章
- 面试突击78:@Autowired 和 @Resource 有什么区别?
@Autowired 和 @Resource 都是 Spring/Spring Boot 项目中,用来进行依赖注入的注解.它们都提供了将依赖对象注入到当前对象的功能,但二者却有众多不同,并且这也是常见 ...
- Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理
一.spring依赖注入使用方式 @Autowired是spring框架提供的实现依赖注入的注解,主要支持在set方法,field,构造函数中完成bean注入,注入方式为通过类型查找bean,即byT ...
- @Autowired和@Resource注解的区别
@Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false.如果我们想使用按名称装配,可以结合@Qualifier注 ...
- @Autowired、@Resource、@Qualifier区别
@Autowired 1.属于spring的注解,如果不想和Spring耦合的太紧,就不推荐使用. 2.默认情况下,要求依赖对象必须存在,不能为null.如果允许为空,那么设置属性值required为 ...
- java @Autowired与@Resource的区别
@Autowired与@Resource的区别 1.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2.@Autowired默认 ...
- Spring中@Autowired注解、@Resource注解的区别
Spring不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource.@PostConstruct以及@PreDestroy. @Resour ...
- Spring 注释 @Autowired 和@Resource 的区别
Spring 注释 @Autowired 和@Resource 的区别 一. @Autowired和@Resource都可以用来装配bean,都可以写在字段上,或者方法上. 二. @Autowired ...
- 转:Spring中@Autowired注解、@Resource注解的区别
Pay attention: When using these annotations, the object itself has to be created by Spring context. ...
- @Autowired标签与 @Resource标签 的区别
Spring不但支持自己定义的@Autowired注解,还支持由JSR-250规范定义的几个注解,如:@Resource. @PostConstruct及@PreDestroy. 1. @Autowi ...
- @Autowired和@Resource注解的一个意外重要区别
今天上午,因为公司要跟客户展示最近开发的项目,然后安排了我重新构建一个template项目,用来向客户展示参考.基于已开发好的代码,我在进行一些简化抽取的时候出现了一个有趣的问题 因为我们有一个spr ...
随机推荐
- 在 ThinkPad E470 上安装 Ubuntu 16.04 无线网卡驱动
目录 文章目录 目录 安装 安装 # 查看无线网卡驱动类型,E470 一般为 RTL8821CE lspci # 安装必要工具 sudo apt-get install build-essential ...
- java学习之旅(day.20)
注解和反射 注释comment:给人看 注解annotation:不仅可以给人看,还能给程序看,甚至能被其他程序读取 注解入门 什么是注解 注解的作用: 不是程序本身,可以对程序作出解释(这一点和注释 ...
- 前端使用 Konva 实现可视化设计器(11)- 对齐效果
这一章补充一个效果,在多选的情况下,对目标进行对齐.基于多选整体区域对齐的基础上,还支持基于其中一个节点进行对齐. 请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了 Bug,欢迎来提 I ...
- 【漏洞复现】用友NC-Cloud系统uploadChunk存在任意文件上传漏洞
阅读须知 花果山的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站.服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作.利用此 ...
- Semantic Kernel入门系列:利用Handlebars创建Prompts functions
引言 本章我们将学习通过Handlebars Prompts Template来创建Prompts functions. 什么是Handlebars? Handlebars是一个流行的 JavaScr ...
- IceRPC之深入理解调度管道->快乐的RPC
作者引言 很高兴啊,我们来到了IceRPC之深入理解调度管道->快乐的RPC,为上篇的续篇,深入理解常见的调度类型, 基础引导,有点小压力,打好基础,才能让自已不在迷茫,快乐的畅游世界. 传入请 ...
- Validate插件的自定义验证方法入门(结合Ajax实现用户名的数据库查重)
概述 本文介绍Validate自定义表单校验方式.Validate插件虽然提供了丰富的验证规则,但在很多时候仍然很难满足我们的开发需求,在注册页面我们需要通过ajax验证用户输入的用户名是否已经被他人 ...
- Django——启动项目时报错mysqlclient
报错内容如下: Watching for file changes with StatReloader Exception in thread django-main-thread: Tracebac ...
- 微信小程序预约视频号直播
一.概述 微信小程序提供了可以唤起预约视频号直播弹窗的接口 reserveChannelsLive,该接口接收一个参数 noticeId,通过 getChannelsLiveNoticeInfo 接口 ...
- xshell 自动断开连接的解决方法
1. 问题分析 本文Xshell连接自动断开的原因是SSH配置文件的ClientAliveInterval字段设置的超时断开时间小于Xshell的检查断开连接时间. 2. SSH配置文件中的字段详解 ...