面试问:@Resource 和@Autowired 的区别是什么?该怎么回答

news2024/11/26 1:17:37

@Resource@Autowired 这两个注解的作用都是Spring生态里面去实现 Bean 的依赖注入


@Autowired注解的作用

@Autowired是Spring里面提供的一个注解,它默认是根据类型来实现Bean的依赖注入。

@Autowired注解里面有一个required属性,它的默认值是true,表示强制要求Bean实例的注入,在应用启动的时候如果IOC容器里面不存在对应类型的Bean,那么启动的时候就会报错。

如果我们不希望去实现自动注入,可以把这个属性设置为false。


在这里插入图片描述


如果在Spring IOC容器里面存在多个相同类型的Bean实例,由于@Autowired注解它是根据类型来注入Bean实例的,所以Spring容器启动的时候会提示一个错误,大概的意思是原本只能注入一个单实例Bean但是在IOC容器里面有多个导致注入失败。


在这里插入图片描述


当然针对这个问题我们可以使用 @Primary 或者 @Qualifier 这两个注解来解决

@Primary表示主要的Bean,当存在多个相同类型Bean的时候,优先使用声明了@Primary注解的一个Bean

而@Qualifier注解类似于条件筛选,它可以根据Bean的名字去找到需要装配的目标Bean。


在这里插入图片描述


@Resource注解的作用

@Resource是JDK里面提供的注解,只是Spring在实现上提供了这种注解功能的一个支持,它的使用方式和@Autowired注解的使用方式是完全相同的,最大的差异化在于@Resource可以支持 ByNameByType 两种注入方式。

如果使用Name,Spring会根据Bean的名字去进行依赖注入,如果使用Type,Spring会根据类型来进行依赖注入。

假设两个属性都没有配置的情况下它会先根据定义的属性名字去匹配,如果没有匹配成功再根据类型来匹配,如果两个都没有匹配到的话就会报错。


在这里插入图片描述



总结

  • @Autowired注解是根据类型来匹配的,而@Resource注解可以根据Name和Type来匹配,默认是Name匹配。
  • @Autowired注解是Sping里面定义的注解,而@Resource注解是JSR 250规范里面定义的注解,只是Spring对JSR 250规范提供了支持而已。
  • @Autowired注解如果需要支持Name匹配就需要配合@Primary或者@Qualifier注解来实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/165319.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人大金仓数据库安装篇

图形化安装 规划安装路径与修改目录属主 先用root账户挂载金仓镜像包 mount -o loop /install/KingbaseES_V008R006C005B0023_Lin64_single_install.iso /mnt 切换kingbase用户来安装金仓数据库 进入挂载目录/mnt执行./setup.sh 将金仓注册为系统服务 /KingbaseES/V8/Scrip…

1592_AURIX_TC275_PMU_部分安全措施

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) UCB的几种状态通过寄存器的数值可以直接获取到。启动代码会识别到UCB的错误,如果识别到后悔停止继续,因此不会启动MCU。启动代码也会检查HSM是否存在以及是否需要启…

基于TensorFlow2搭建神经网络实现鸢尾花iris.txt分类

分三步:本地读取鸢尾花数据集搭建神经网络优化本地读取鸢尾花数据集读取本地数据集的两种方法读取本地数据集有两种方法:(1)利用pandas中的函数读取,并处理成神经网络需要的数据结构pd.read_csv(文件名, header第几行作…

使用码云Gitee创建代码仓库并提交代码

目录 1. 登录Gitee官网 2. 创建代码仓库 3. 克隆仓库到本地 4. 提交代码到Gitee仓库 官方文档:创建你的第一个仓库 - Gitee.com 1. 登录Gitee官网 官网地址:Gitee - 基于 Git 的代码托管和研发协作平台 2. 创建代码仓库 点击图中加号创建仓库&am…

String的不可变性

1.什么是不可变对象 如果一个对象在创建之后就不能再改变它的状态,那么这个对象是不可变的(Immutable)。不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型变量的值不能改变,引用类型的变量…

数据库面试题

数据库基础知识 什么是MySQL? MySQL是一个数据库管理系统。 数据库是数据的结构化集合。 MySQL数据库是关系型的。 关系数据库将数据存储在单独的表中,而不是将所有数据放在一个大仓库中。数据库结构被组织成针对速度进行了优化的物理文件。具有对象&a…

第五届字节跳动青训营 前端进阶学习笔记(一)前端和HTML

文章目录1.前言2.什么是前端3.前端需要关注哪些问题4.HTML语法5.HTML标签6.HTML中的内容划分7.总结这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天 1.前言 本次课程主要介绍了: 前端要解决的基本问题HTML的基本定义和语法为什么要语义化和怎么做的语义化 …

深度学习——梯度

一、初识梯度 import torch x torch.arange(4.0) print(x) x.requires_grad_(True) y 2 * torch.dot(x, x) #torch.matmul(x, x) print(y) y.backward() print(x.grad) print(x.grad 4*x)输出&#xff1a; tensor([0., 1., 2., 3.]) tensor(28., grad_fn<MulBackward0&g…

批次标准化Batch Normalization

批次标准化Batch Normalization 目录 批次标准化Batch Normalization 为什么需要批次标准化 产生上述变化趋势不匹配的原因 处理方法 处理方法的优化 Batch Normalization的引出Testing时的相应处理 批次标准化Batch Normalization 第五节 2021 - 类神经网络训练不起来怎么…

从【卡内基梅隆大学机器人概论课】认识机器人学科需要哪些技能栈

闲来无事&#xff0c;找到了卡内基梅隆大学机器人研究所&#xff0c;看了下他们机器人的教育&#xff0c;不得不感慨相比我们学校先进了不知多少&#xff0c;是真真切切让同学们去了解机器人的方方面面&#xff0c;下面摘自它们的概论作业。 作业0 作业1 作业2 作业3 作业4 作…

LeetCode 79 单词搜索 | 解题思路分享

原题链接&#xff1a;79. 单词搜索 题目难度&#xff1a;中等 题目描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的…

css03笔记

目录 css三大特性 优先级 权重叠加计算 chrome调试工具 盒子模型 1.1 盒子模型的介绍 2.1内容的宽度和高度 3.1边框&#xff08;border&#xff09; 3.2边框-单方向设置 3.3边框-单个属性 综合案例一&#xff08;新浪导航&#xff09; 4.1 内边距&#xff08;paddi…

5.11回溯法--电路板排列问题--排列树

问题描述 将n块电路板以最佳排列插入带有n个插槽的机箱中&#xff0c;要求对于给定的电路板连接块&#xff0c;确定最佳排列&#xff0c;使其具有最小的密度。设x[ ] 表示n块电路板的一个排列&#xff0c;x[ i ]表示在机箱的第 i 个插槽中插入电路板x[ i ]&#xff0c;x确定的电…

尚硅谷ES6李强笔记

1.课程介绍 1.es是什么 2.新特性的优点 3.学习课程必备知识背景 2.相关名词介绍 3. let变量声明以及声明特性 3.1变量声明方式 //普通声明 let a;//一次性声明多个变量 let a,b,c;//声明并且初始化 let a 100;//一次性声明多个并且初始化 let a2,b1,ci love you;3.2不允许重…

打工人必学的法律知识(一)——《中华人民共和国劳动合同法》必知必会

目录 一、劳动合同无效或者部分无效 二、竞业限制 三、劳动合同的履行和变更 四、劳动合同的解除和终止 一、劳动合同无效或者部分无效 第二十六条 下列劳动合同无效或者部分无效&#xff1a;&#xff08;一&#xff09;以欺诈、胁迫的手段或者乘人之危&#xff0c;使对方…

使用FFmpeg命令处理音视频

文章目录前言一、ffprobe相关命令1.使用ffprobe查看音频文件的信息2.使用ffprobe查看视频文件的信息二、ffplay相关命令1.基本的ffplay命令2.音视频同步命令三、ffmpeg相关命令1.ffmpeg通用参数2.ffmpeg视频参数3.ffmpeg音频参数4.ffmpeg示例总结前言 FFmpeg是一套可以用来记录…

【C语言】字符函数,字符串函数,内存函数及其模拟实现

文章目录求字符串长度strlen长度不受限制的字符串函数strcpystrcatstrcmp长度受限制的字符串函数strncpystrncatstrncmp字符串查找函数strstrstrtokstrerror字符函数字符分类函数字符转换函数内存操作函数memcpymemmovememsetmemcmp求字符串长度 strlen 函数功能 求字符串长…

【机器学习之模型融合】Voting投票法简单实践

目录 前言&#x1f49c; 1、使用sklearn实现投票法&#x1f494; 1.1、导入工具库&#xff0c;准备数据&#x1f495; 1.2、定义交叉验证评估函数&#x1f496; 1.3、建立基于交叉验证的benchmark、做模型选择&#x1f31f; 1.4、构建多组分类器、进行融合&#x1f4a5;…

单线程的Node.js能开发高并发服务器程序吗?

文章目录前言Nodejs的事件驱动机制EventLoop vs NSRunLoopNSRunLoopios next runloop异步/事件循坏机制的那些坑批量迁移数据原子性参考文献前言 这篇文章还是从一个在写Node.js程序中遇到的问题说起。本周在做数据库迁移的时候&#xff0c;写了下面一段代码&#xff0c;目的是…

代数与逻辑:作业四 神经网络

代数与逻辑&#xff1a;作业四 神经网络 文章目录代数与逻辑&#xff1a;作业四 神经网络一、作业要求二、简述神经网络模型三、编程实现感知机模型与二隐层神经网络1、感知机模型2、二隐层神经网络四、选择公开数据集&#xff0c;测试感知机模型与二隐层神经网络性能一、作业要…