使用@Lazy注解解决循环依赖的问题
有这样一个场景:
订单服务与用户服务的循环依赖
假设在一个电商系统中,我们有两个服务类:OrderService 和 UserService。
OrderService 需要访问用户服务来获取或更新订单关联的用户信息。例如,当处理订单时,可能需要检查用户的信用状态或地址信息。
@Service
public class OrderService {@Autowiredprivate UserService userService;public void processOrder(Order order) {User user = userService.getUserById(order.getUserId());// ...进一步的业务逻辑}
}
UserService 同样也需要访问订单服务,比如为了统计用户的购买行为或者计算用户的积分,这可能涉及到查询某个用户下的所有订单。
@Service
public class UserService {@Autowiredprivate OrderService orderService;public User getUserWithOrders(int userId) {User user = getUserById(userId);List<Order> orders = orderService.getOrdersByUserId(userId);user.setOrders(orders);return user;}
}
在这个案例中,OrderService 类中注入了 UserService,而 UserService 类中又注入了 OrderService。这就构成了一个循环依赖:OrderService → UserService → OrderService。
启动时会报错类似这样:
Description:The dependencies of some of the beans in the application context form a cycle:xxxxxxx

解决
使用@Layz懒加载策略解决;
调整后的代码:
@Service
public class OrderService {@Autowiredprivate UserService userService;public void processOrder(Order order) {User user = userService.getUserById(order.getUserId());// ...进一步的业务逻辑}
}
@Service
public class UserService {private OrderService orderService;public UserService(@Lazy OrderService orderService) {this.orderService= orderService;}public User getUserWithOrders(int userId) {User user = getUserById(userId);List<Order> orders = orderService.getOrdersByUserId(userId);user.setOrders(orders);return user;}
}
相关文章:
使用@Lazy注解解决循环依赖的问题
有这样一个场景: 订单服务与用户服务的循环依赖 假设在一个电商系统中,我们有两个服务类:OrderService 和 UserService。 OrderService 需要访问用户服务来获取或更新订单关联的用户信息。例如,当处理订单时,可能需要…...
manim边学边做--SingleStringMathTex
SingleStringMathTex是Mobjects分类中用来显示数学公式的class。 manim中有3个可以用来显示数学公式的class,还有两个是MathTex和Tex,后续再介绍。 从SingleStringMathTex的名称中也可以看出,它是用来显示只有一行的简单公式。 SingleStrin…...
4、双足机器人mpc基础概念
MPC全称是Model Predictive Control,即模型预测控制。主要思想是通过建立机器人动态模型,在运动过程中通过控制输入,来预测机器人未来的运动轨迹和状态。此处的机器人特指双足机器人。 坐标系1、W(orld)系:固定于地面上某点,用于定义机器人绝对位置的是世界坐标系。此处x=…...
论坛实现随机发帖的学习
1、badboy操作,录制发帖全过程,录制结果保存,生成为.jmx格式的文件 2、在Jmeter中打开该.jmx文件,重命名,便于了解步骤 3、生成结果树,查看所以步骤是否正确 4、实现随机发帖 断言:具有唯一表…...
麒麟系统设置jar开机自启动自定义服务
项目场景: 在信创项目中,麒麟操作系统(兆芯)客户端访问web端程序时,PC机器上需要安装读卡器读卡服务(自定义服务)才能读取身份证/卡片信息,并开机自启动。 解决方案: /usr/local/custom-server目…...
WebPages 全局
WebPages 全局 概述 WebPages 全局是一个综合性的概念,涉及网站设计、开发、优化和管理的各个方面。在当今数字化时代,拥有一个功能齐全、用户友好的网站对于个人和企业来说至关重要。本文将深入探讨 WebPages 全局的相关主题,包括网站设计…...
19 Shell编程之条件语句
目录 19.1 条件测试操作 19.1.1 文件测试 19.1.1 整数值比较 19.1.3 字符串比较 19.1.4 逻辑测试 19.2 if条件语句 19.2.1 if语句的结构 19.2.2 if语句应用示例 19.3 case分支语句 19.3.1 case语句的结构 19.3.2 case语句应用示例 19.1 条件测试操作 Shell环境根据命令执行后…...
生产看板管理系统内容有哪些?
相信很多做生产管理的朋友都会遇到如下问题,我就在想,是否能一个创建“透明的”的工作场所?让员工和管理者能够实时查询生产进度,及时发现生产中的问题。 生产进度难追踪 生产过程不透明 生产决策缺乏数据支持 ——能…...
玩转数据库索引
1、概述 通常我们要对数据库进行优化,主要可以通过以下五种方法。 计算机硬件调优应用程序调优数据库索引优化SQL语句优化事务处理调优 本篇文章将向大家介绍数据库中索引类型和使用场合,本文以SQL Server为例,对于其他技术平台的朋友也是有…...
公共云遣返的经济性
在过去的几年里,显而易见的是,尽管公有云具有所有优势,但它并不能大规模地节省成本。它在一定程度上提高了生产力,但不会降低您的成本。公有云的好处在于,它提供了一个非常强大的价值主张,即基础设施可以立…...
夏季河湖防溺水新举措:EasyCVR+AI视频智能监控系统保障水域安全
近日一则新闻引起大众关注,有网友发布视频称,假期在逛西湖时,发现水面上“平躺”漂浮着一名游客在等待救援。在事发3分钟内,沿湖救生员成功将落水游客救到了岸边。 随着夏季的到来,雨水增多,各危险水域水位…...
2024年最新【交安】公路水运安全员备考题库。
46.( )负责建筑施工企业安全生产许可证的颁发和管理,并接受国务院建设主管部门的指导和监督。 A.国务院建设主管部门 B.国务院安全生产监督管理部门 C.省、自治区、直辖市人民政府建设主管部门 D.省、自治区、直辖市人民政府安全生产监督管理部门 答案&…...
Excel 宏录制与VBA编程 —— 16、InputBox函数的使用方式
Input函数基本操作 InputBox函数的Type参数使用技巧(输入类型限制,若输入类型不符系统提示) 关注 笔者 - jxd...
【ai】tx2 nx : yolov4加入initLibNvInferPlugins构建
先说结果:make 成功 插件头文件 复制一份: /** Copyright 1993-2021 NVIDIA Corporation. All rights reserved.** NOTICE TO LICENSEE:** This source code and/or documentation ("Licensed Deliverables") are* subject to NVIDIA intellectual property right…...
【Proteus仿真】【Arduino单片机】基于物联网新能源电动车检测系统设计
文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器,使用LCD1602液晶显示模块、WIFI模块、蜂鸣器、LED按键、ADC、DS18B20温度传感器等。 主要功能: 系统运行后,LCD1602显示温…...
MobaXterm破解专业版方法
MobaXterm专业版(含授权)-CSDN博客 1.安装python3环境,使用vscode打开文件夹,新建终端,在终端中执行命令 python MobaXterm-Keygen.py "DoubleSine" 20.2 (20.2为MobaXterm版本号,…...
0基础学JMeter:如何开始简单的WEB压力测试(一)
背景 最近工作上被安排针对Web网站进行性能压测,以评估特定的硬件配置下Web网站可支持的并发用户数。考虑到JMeter是流行的Web性能压测工具,因此趁着这次机会上网查阅了很多关于JMeter的资料,也自己动手进行软件的配置和调测,从最…...
ArcGIS数据处理与制图
在数字化和智能化的浪潮中,GIS(地理信息系统)和GPT(生成式预训练模型)的结合正日益成为推动科研、城市规划、环境监测等领域发展的关键技术。GIS以其强大的空间数据处理、先进的空间分析工具、灵活的地图制作与可视化能…...
基于Java微信小程序校园订餐系统设计和实现(源码+LW+调试文档+讲解等)
💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟感兴趣的可以先收藏起来,还…...
基于文件的本地数据库组件 DuckDB, ChDB, SQLite, LevelDB, RocksDB
OLTP 与 OLAP 的区别: OLTP(on-line transaction processing) 联机事务处理,主要就是一些传统的数据库,比如 Mysql。OLAP(On-Line Analytical Processing) 联机分析处理,主要应用在大数据分析处理领域,比如 Clickhous…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
