当前位置: 首页 > news >正文

@Resource和@Autowired的区别

1.相同点

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

2.不同点

2.1 @Autowired

首先,@Autowired是Spring里面提供的一个注解,默认是根据类型来实现Bean的依赖注入。
@Autowired注解里面有一个required属性默认值是true,表示强制要求bean实例的注入,在应用启动的时候,如果IOC容器里面不存在对应类型的Bean,就会报错。当然,如果不希望自动注入,可以把这个属性设置成false。

@Controller
public class HelloController {@Autowired(required = true)private HelloService helloService;@ResponseBody@RequestMapping("/hello")public String hello() {return helloService.hello();}
}

但是当项目有多个相同类型的Bean被定义时,使用@Autowired会报错

@org.springframework.context.annotation.Configuration
public class Configuration {@Bean("hello1")public HelloService hello1() {return new HelloServiceImpl();}@Bean("hello2")public HelloService hello2() {return new HelloServiceImpl();}
}

所以Spring启动的时候,会提示一个错误,大概意思原本只能注入一个单实例Bean,但是在IOC容器里面却发现有多个,导致注入失败。

Field helloService in com.zte.helloworld.contorller.HelloController required a single bean, but 3 were found:- helloServiceImpl: defined in file [D:\JavaWorkSpace\code\helloworld\target\classes\com\zte\helloworld\service\impl\HelloServiceImpl.class]- hello1: defined by method 'hello1' in class path resource [com/zte/helloworld/config/Configuration.class]- hello2: defined by method 'hello2' in class path resource [com/zte/helloworld/config/Configuration.class]Action:
Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed

针对这个问题,我们可以使用 @Primary或者@Qualifier这两个注解来解决。
@Primary表示主要的bean,当存在多个相同类型的Bean的时候,优先使用声明了@Primary的Bean。
@Qualifier的作用类似于条件筛选,它可以根据Bean的名字找到需要装配的目标Bean。

@Controller
public class HelloController {@Autowired(required = true)@Qualifier("hello1")private HelloService helloService;@ResponseBody@RequestMapping("/hello")public String hello() {return helloService.hello();}
}

2.2 @Resource

@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持。
它的使用方式和@Autowired完全相同,最大的差异于@Resource可以支持ByName和ByType两种注入方式。
如果使用name,Spring就根据bean的名字进行依赖注入,如果使用type,Spring就根据类型实现依赖注入。
如果两个属性都没配置,就先根据定义的属性名字去匹配,如果没匹配成功,再根据类型匹配。两个都没匹配到,就报错。

@Controller
public class HelloController {//    @Autowired(required = true)
//    @Qualifier("hello1")
//    private HelloService helloService;@Resource(name = "helloService01")private HelloService01 helloService01;@Resource(type = HelloService02.class)private HelloService02 helloService02;@ResponseBody@RequestMapping("/hello")public String hello() {return helloService02.hello();}
}

3.总结

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

相关文章:

@Resource和@Autowired的区别

1.相同点 Resource和Autowired这两个注解的作用都是在Spring生态里面去实现Bean的依赖注入 2.不同点 2.1 Autowired 首先,Autowired是Spring里面提供的一个注解,默认是根据类型来实现Bean的依赖注入。 Autowired注解里面有一个required属性默认值是t…...

linux达梦数据库的安装与卸载

一、安装 创建dmdba用户及用户组 创建安装目录: mkdir -p /dm8 创建组 :groupadd dinstall 创建用户 :useradd -g dinstall dmdba 设置密码 :passwd dmdba 创建文件夹:mkdir /dmdata 更改安装目录所有者: c…...

生成式模型的质量评估标准

Sample Quality Matrix 如何评价生成式模型的效果?ISFIDsFIDPrecision & RecallPrecisonRecall计算precision和recall 如何评价生成式模型的效果? Quality: 真实性(逼真,狗咬有四条腿) Diversity: 多样性&#x…...

pinpoint安装部署(相关博客合集)

pinpoint安装部署 说明一、PinPoint介绍及工作原理1.1 确定部署的组件及服务 二、相关组件版本兼容情况2.1 确定版本 三、部署3.1 HBASE3.2 agent 说明 本博客写在搭建PinPoint之前,主要是用来记录查阅的相关博客资料,等到动手搭建完再更新实际部署操作…...

python-匿名函数(lambda函数)

匿名函数(lambda函数) 匿名函数(也称为lambda函数)是一种在代码中定义临时函数的方式,它没有明确的函数名称。匿名函数通常用于需要简短、一次性的函数定义,特别是在处理函数作为参数传递或函数返回的情况…...

JS逆向常见情况

分类:JS压缩混淆加密 与 URL/API参数的加密 代码压缩:去除不必要的空格换行等内容,使源码变成几行,大大降低可读性并提升网站加载速度 代码混淆:使用变量替换、字符串阵列化、控制流平坦化、多态变异、僵尸函数…...

利用matlab对滤波器频率特性分析

【设计目标】对双二阶环路滤波器进行时频域分析和处理的基本方法 【设计工具】MATLAB【设计要求】 1)分析典型的双二阶环路滤波器电路:低通、高通、带通、带阻 2)理论分析各滤波电路的系统函数 3)利用Matlab分析各滤波电路的系统函数的频率特性(幅频、相频)、零极点分…...

对比 RS232,RS422,RS485

对比 RS232,RS422,RS485 首先, 串口、UART口、COM口、RJ45网口、USB口是指的物理接口形式(硬件)。TTL、RS-232、RS-485、RS-422是指的电平标准(电信号)。 RS232,RS422,RS485 对比表格 通信标准RS-232RS-422RS-485工作方式单端差分差分通信线数量4 地线52 地线3节…...

python使用requests+excel进行接口自动化测试(建议收藏)

前言 在当今的互联网时代中,接口自动化测试越来越成为软件测试的重要组成部分。Python是一种简单易学,高效且可扩展的语言,自然而然地成为了开发人员的首选开发语言。而requests和xlwt这两个常用的Python标准库,能够帮助我们轻松…...

华为OD机试真题 Java 实现【食堂供餐】【2023 B卷 考生抽中题】,附详细解题思路

一、题目描述 某公司员工食堂以盒饭的方式供餐。 为将员工取餐排队时间降为0,食堂的供餐速度必须要足够快。 现在需要根据以往员工取餐的统计信息,计算出一个刚好能达到排队时间为0的最低供餐速度。 即,食堂在每个单位时间内必须至少做出多少份盒饭才能满足要求。 二、…...

一分钟学一个 Linux 命令 - cd

前言 大家好,我是 god23bin。欢迎来到这个系列,每天只需一分钟,记住一个 Linux 命令不成问题。今天让我们从 cd 命令开始,掌握在 Linux 系统中切换目录的技巧。 什么是 cd 命令? cd 命令来自这么一个词语&#xff0…...

vi(vim)常用命令汇总

vim ~/.vimrc vim.vimrc 配置 set nobackup set cursorline #当前行 set cc100 #分屏线 set number set laststatus2 syntax on colorscheme delek 快速移动光标 w(e) 移动光标到下一个单词 b 移动光标到上一个单词 0 移动光标到本行最开头 ^ 移动光标到本行最开头的字符…...

模特信息管理系统的开发与实现(ASP.NET,SQLServer)

需求分析 模特信息管理系统主要给商家和模特用户提供服务,系统分为前台和后台两部分。 本研究课题重点主要包括:活动管理,商家管理,模特管理,系统公告管理和活动报名管理。 活动管理模块主要实现活动更新、活动添加、活…...

文件上传漏洞

<1>概述 漏洞产生原因&#xff1a;服务端代码未对客户端上传的文件进行严格的验证和过滤&#xff0c;就容易造成可以上传任意文件的情况。 <2>文件上传绕过 (1)js检测绕过 1.删除js中检测文件的代码&#xff1b; 2.上传的文件改为允许的后缀绕过js检测后再抓包…...

前端还是后端,该怎么选择

在计算机科学领域&#xff0c;前端和后端是两个常见的方向&#xff0c;它们各自拥有独特的特点和职责。本文将对前端和后端进行比较&#xff0c;并总结哪些人适合前端&#xff0c;哪些人适合后端。 一、前端 前端开发主要涉及构建用户界面&#xff0c;处理用户交互和用户体验…...

【Python】Python系列教程-- Python3 循环语句(十七)

文章目录 前言while 循环无限循环while 循环使用 else 语句简单语句组for 语句for...elserange() 函数break 和 continue 语句及循环中的 else 子句pass 语句 前言 往期回顾&#xff1a; Python系列教程–Python3介绍&#xff08;一&#xff09;Python系列教程–Python3 环境…...

chatgpt赋能python:Python如何变为列表

Python如何变为列表 Python是一种高级编程语言&#xff0c;用于快速、轻松地编写软件。它的语法简洁、易于学习&#xff0c;可以用于各种领域&#xff0c;包括Web开发、机器学习和数据科学等。其中&#xff0c;列表是Python的一种基本数据类型&#xff0c;它用于存储一系列相关…...

高频面试八股文用法篇(二) hive中几种排序类型区别

目录 排序函数 1、order by 2、sort by 3、distribute by 4、cluster by 总结 排序类型 1、order by order by是与关系型数据库的用法是一样的。select * from emp order by empno desc; 针对全局数据进行排序&#xff0c;所以最终只会有1个reduce&#xff0c;因…...

linuxOPS基础_linux umask

1、什么是umask umask表示创建文件时的默认权限&#xff08;即创建文件时不需要设置而天生的权限&#xff09; 例如&#xff1a; root用户下&#xff0c;touch a &#xff0c;文件a的默认权限是644 普通用户下&#xff0c;touch b &#xff0c;文件b的默认权限是664 644和…...

K8s基础核心

Kubernetes (K8s) 是一个用于自动化部署、扩展和管理容器化应用程序的开源平台。下面是 Kubernetes 的一些核心概念&#xff1a; Pod&#xff08;容器组&#xff09;&#xff1a;Pod 是 Kubernetes 中最小的可调度和管理的单元 &#xff0c;它可以包含一个或多个相关的容器。这…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么&#xff1f;1.1.2 感知机的工作原理 1.2 感知机的简单应用&#xff1a;基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

day36-多路IO复用

一、基本概念 &#xff08;服务器多客户端模型&#xff09; 定义&#xff1a;单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用&#xff1a;应用程序通常需要处理来自多条事件流中的事件&#xff0c;比如我现在用的电脑&#xff0c;需要同时处理键盘鼠标…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础

第三周 Day 3 &#x1f3af; 今日目标 理解类&#xff08;class&#xff09;和对象&#xff08;object&#xff09;的关系学会定义类的属性、方法和构造函数&#xff08;init&#xff09;掌握对象的创建与使用初识封装、继承和多态的基本概念&#xff08;预告&#xff09; &a…...

VisualXML全新升级 | 新增数据库编辑功能

VisualXML是一个功能强大的网络总线设计工具&#xff0c;专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑&#xff08;如DBC、LDF、ARXML、HEX等&#xff09;&#xff0c;并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中&#xff0c;如何展示好看的实验结果图像非常重要&#xff01;&#xff01;&#xff01; 1、灰度原始图像 灰度图像每个像素点只有一个数值&#xff0c;代表该点的​​亮度&#xff08;或…...

智能体革命:企业如何构建自主决策的AI代理?

OpenAI智能代理构建实用指南详解 随着大型语言模型&#xff08;LLM&#xff09;在推理、多模态理解和工具调用能力上的进步&#xff0c;智能代理&#xff08;Agents&#xff09;成为自动化领域的新突破。与传统软件仅帮助用户自动化流程不同&#xff0c;智能代理能够自主执行工…...