springboot对象参数赋值变化

java springboot 项目, 通过接口修改Person类 name值, 在别的类中,注入Person类 @Resource Person person, 为什么拿不到 接口修改的 name的值,是Person类 不同的对象造成的 吗

参数对象和注入对象区别

Person类,一个是作为control参数@RequestBody 一个是@Resource 注入

在Spring MVC应用中,当你遇到一个`Person`类既作为控制器(Controller)方法的`@RequestBody`参数接收请求体中的数据,又在另一个服务类中通过`@Resource`或`@Autowired`注解注入时,这两者实际上是不同的实例,分别服务于不同的目的和生命周期管理。

### `@RequestBody`的用途

- 当你在控制器方法中使用`@RequestBody`注解时,Spring MVC会将HTTP请求的主体(body)内容自动绑定到方法的参数上。这里的`Person`对象是根据请求中发送的JSON或XML等数据动态创建的,仅存在于该请求的上下文中,用于处理该次请求的数据。

### `@Resource`或`@Autowired`的用途

- 当你在一个服务类中使用`@Resource`或`@Autowired`注解来注入`Person`类的实例时,Spring IoC容器会负责提供这个Bean的实例。默认情况下,这样的Bean通常是单例(Singleton)的,意味着在整个应用运行期间,每次注入该类型的Bean时,都将获得容器中同一个共享的实例。这个实例通常由Spring容器初始化时创建,并根据需要管理其生命周期。

### 为何两者不共享状态

由于通过`@RequestBody`解析的`Person`对象是针对每个HTTP请求新创建的,而通过`@Resource`注入的`Person`实例是由Spring容器管理的,可能是单例的,两者存在于不同的作用域中,因此它们不共享状态。即使你修改了通过`@RequestBody`接收到的`Person`对象的属性,这不会影响到通过依赖注入获取到的`Person`实例。

解决状态同步问题

如果需要在服务层响应`@RequestBody`接收到的数据变更,并且确保其他地方注入的`Person`实例能够感知到这些变更,你需要设计一个机制来同步这些状态变化。这通常涉及数据库操作、使用消息队列或更新缓存等,而不是直接修改注入的Bean实例。例如,你可以将接收到的数据保存到数据库,然后在需要的地方重新加载最新的数据。

在Spring Boot应用程序中,如果您在Controller中使用@RequestBody将JSON数据映射到Person对象,并在其他Service或Component中使用@Resource注入同一个Person对象,那么这两个操作通常涉及不同的实例。

这是因为@RequestBody通常用于接收前端发送的请求体中的数据,并自动将JSON格式的数据映射到Java对象。这个对象是Spring根据请求内容创建的新实例,而不是Spring容器管理的Bean。

另一方面,@Resource@Autowired用于注入由Spring容器管理的Bean。如果Person类被标记为@Component@Service,那么Spring会创建一个Person类的实例,并将其注册到容器中,以便在其他地方注入。

因此,如果您在Controller中通过@RequestBody接收了一个Person对象并修改了它的name属性,这个修改不会影响到通过@Resource注入的Person实例,因为它们是两个不同的对象。

如果您想要在Service或Component中使用通过Controller更新的Person对象,您需要将这个对象传递过去,而不是注入一个全新的实例。例如:

@Controller
public class PersonController {@Autowiredprivate PersonService personService;@PostMapping("/updatePerson")public ResponseEntity<?> updatePerson(@RequestBody Person person) {// 这里person是通过@RequestBody接收的新实例personService.updatePerson(person);return ResponseEntity.ok().build();}
}@Service
public class PersonService {// 这里注入的是Spring容器管理的Person实例@Resourceprivate Person person;public void updatePerson(Person updatedPerson) {// 将通过Controller更新的person对象的属性复制到注入的person对象person.setName(updatedPerson.getName());// ... 其他属性的复制}
}

在这个例子中,PersonServiceupdatePerson方法接收了一个通过Controller更新的Person对象,并将它的属性复制到通过@Resource注入的Person对象中。这样,您就可以在Service中使用更新后的数据了。

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

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

相关文章

云WAF | 云waf基础知识详解

随着数字时代的到来&#xff0c;网络安全问题越来越突出&#xff0c; Web应用防火墙&#xff08;WAF&#xff09;是保障 Web应用安全的一道重要防线。在云计算环境下&#xff0c;云环路由云平台&#xff08;WAF&#xff09;的出现&#xff0c;其融合了 WAF的能力和云计算的灵活…

【Linux】IP地址与主机名

文章目录 1.IP地址2.特殊IP地址3.主机名4.域名解析 1.IP地址 每一台联网的电脑都会有一个地址&#xff0c;用于和其它计算机进行通讯 IP地址主要有2个版本&#xff0c;V4版本和V6版本 IPv4版本的地址格式是&#xff1a;a.b.c.d,其中abcd表示0~255的数字&#xff0c;如192.168.…

PS 2024【最新】中文白嫖版!,安装教程,图文步骤

文章目录 软件介绍软件下载安装步骤 软件介绍 Photoshop&#xff0c;简称“PS” Adobe Photoshop&#xff0c;简称“PS”&#xff0c;是由Adobe Systems开发和发行的图像处理软件。Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具&#xff0c;可以有效地…

利用AI快速上手新项目:开发者的高效指南

使用AI帮助开发者熟悉新的项目 在现代软件开发中&#xff0c;开发者经常需要快速熟悉一个新的项目。项目可能包含复杂的结构和大量的文件&#xff0c;这对新手开发者来说无疑是一项挑战。幸运的是&#xff0c;借助AI技术&#xff0c;我们可以更加高效地了解项目结构&#xff0…

道路运输企业管理人员安全考核试题(附答案)

1、【多选题】《道路旅客运输企业安全管理规范》规定&#xff0c;客运企业应当制定车辆动态监控操作规程。操作规程的内容包括( )。(ABCD) A、卫星定位装置、视频监控装置、动态监控平台设备的检修和维护要求 B、动态监控信息采集、分析、处理规范和流程 C、违法违规信息统…

探索Facebook在人工智能领域的最新进展

在当今快速发展的科技领域中&#xff0c;人工智能&#xff08;AI&#xff09;作为一项关键技术&#xff0c;正在逐步改变着社交媒体的面貌。作为全球最大的社交平台之一&#xff0c;Facebook积极探索和应用人工智能&#xff0c;以提升用户体验、增强平台安全性并推动技术创新。…

Nodejs 第八十四章(ElasticSearch搜索)

ElasticSearch基本用法在之前的篇章介绍过了 这里不在过多阐述 模拟假数据 安装库 faker-js/faker 模拟假数据的一个库非常好用支持中文使用中文 locale: [zh_CN], 设置即可生成名字&#xff0c;邮箱&#xff0c;手机号&#xff0c;id&#xff0c;年龄&#xff0c;性别生成完成…

ATT 和 GATT:数据表示和交换

背景介绍 BLE的通信和以太网&#xff0c;wifi有个重大的不同是&#xff1a;BLE通信的设备往往有特定的功能。且这个功能不会在运行中发生变化。 因此蓝牙设备通信的时候&#xff0c;只能访问预先定义好的&#xff08;也就是配置文件profile&#xff09;的功能。 那profile里写…

批量制作word表格

问题背景 将excel表中的成绩内容制作为成绩单&#xff0c;每页对应一个学员的成绩&#xff0c;方便打印 代码实现 ## 导入包 import pandas as pd from docx import Document from docx.enum.text import WD_ALIGN_PARAGRAPH,WD_LINE_SPACING# 读取 Excel 内容 df pd.read_e…

APP接入聚合广告SDK会影响上架应用市场吗?

SDK是移动互联网的基本技术接入方式&#xff0c;而广告聚合SDK仅是实现广告请求返回的功能&#xff0c;所以本身不会有任何问题&#xff0c;而各家应用市场会对具体的广告展现方式等会有不同的要求&#xff0c;开发者可以根据具体的市场需要要求广告平台来配合进行相关设置即可…

精通 mysqldumpslow:深度分析 MySQL 慢查询日志

引言 在数据库管理与优化的领域中&#xff0c;慢查询日志是识别性能瓶颈的金矿。mysqldumpslow 工具是挖掘这座金矿的利器&#xff0c;它帮助我们分析 MySQL 慢查询日志并提取关键信息。本文将详细介绍 mysqldumpslow 的核心选项&#xff0c;并通过实例展示如何使用这些选项来…

IP 地址:优化网络游戏

IP地址和网络游戏 在现代网络游戏中&#xff0c;IP地址不仅用于服务器分配&#xff0c;还能针对性进行玩家匹配与优化网络延迟。本文将探讨IP地址在网络游戏中的具体应用。 *服务器分配* 全球服务器分布&#xff1a; 网络游戏需要在全球范围内提供快速、稳定的连接&#xff…

笔记

https://qoj.ac/problem/8008 不难发现&#xff0c; 随机到某些位置&#xff0c;之后最短路 先O&#xff08;nm&#xff09;预处理出能到的点&#xff0c; 考虑最小的随机位置 首先&#xff0c;我们将求和式进行展开&#xff1a; ∑ j 1 ∞ j ( n − i n ) j − 1 i n \s…

libcoap3对接华为云平台

文章目录 前言一、平台注册二、引入源码库1.libcoap仓库编译2.分析网络报文3.案例代码4.编译&运行 总结 前言 通过libcoap3开源代码库对接华为云平台&#xff0c;本文章将讨论加密与不加密的方式对接华为云平台。 一、平台注册 首先&#xff0c;你需要在华为云平台上创建…

文华财经盘立方博易大师boll布林带指标公式源码

TT:TIME>850&&TIME<1150; MID:MA(CLOSE,26);//求N个周期的收盘价均线&#xff0c;称为布林通道中轨 TMP2:STD(CLOSE,26);//求M个周期内的收盘价的标准差 TOP:MID2*TMP2;//布林通道上轨 BOTTOM:MID-2*TMP2;//布林通道下轨 A:EVERY(ISDOWN,2)&&TT&&…

【鸿蒙学习笔记】使用axios进行HTTP数据请求

官方文档&#xff1a;网络管理开发概述 目录标题 访问淘宝公开接口&#xff08;测试数据&#xff09;第1步&#xff1a;module.json5 配置网络授权第2步&#xff1a;下载axios第3步&#xff1a;源码第4步&#xff1a;启动模拟器第5步&#xff1a;启动entry第6步&#xff1a;操…

python中from import的用法详解

在Python中&#xff0c;from ... import ... 语句用于从指定的模块、包或对象中导入特定的类、函数、变量等。这种导入方式可以让你在代码中使用这些元素时不需要每次都指定它们所属的模块名&#xff0c;从而简化代码&#xff0c;提高可读性。下面详细解释这个语法的用法。 基…

Linux 常用命令 - mkdir【创建新目录】

简介 mkdir 源自于 make directory 的缩写&#xff0c;该命令在 Linux 中用于创建一个或多个新目录。默认情况下&#xff0c;它创建的是空目录&#xff0c;如果待创建的目录已存在&#xff0c;则会提示已存在而不能继续创建&#xff0c;不会覆盖已有文件。如果目录不存在&…

论文AI痕迹过重怎么办?AI降痕工具来帮忙

如何有效利用AI工具提高工作效率&#xff1f;探索这5款顶级AI写作工具 不知道大家有没有发现&#xff0c;随着人工智能技术的快速发展&#xff0c;AI工具正逐渐渗透到我们日常生活的各个方面&#xff0c;极大地提高了我们的工作和学习效率。无论是AI写作、AI绘画、AI思维导图&…

动态架构革新:Mojo模型自定义架构调整指南

动态架构革新&#xff1a;Mojo模型自定义架构调整指南 在机器学习模型部署的过程中&#xff0c;模型架构的灵活性和可定制性是至关重要的。Mojo模型&#xff0c;作为H2O.ai提供的一种模型部署格式&#xff0c;主要用于模型的序列化和预测。虽然Mojo模型本身不支持直接修改已部…