面试问:@Resource 和@Autowired 的区别是什么?该怎么回答
创始人
2024-05-12 11:46:22
0

@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注解来实现。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...