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

使用@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;}
}
http://www.lryc.cn/news/382847.html

相关文章:

  • manim边学边做--SingleStringMathTex
  • 4、双足机器人mpc基础概念
  • 论坛实现随机发帖的学习
  • 麒麟系统设置jar开机自启动自定义服务
  • WebPages 全局
  • 19 Shell编程之条件语句
  • 生产看板管理系统内容有哪些?
  • 玩转数据库索引
  • 公共云遣返的经济性
  • 夏季河湖防溺水新举措:EasyCVR+AI视频智能监控系统保障水域安全
  • 2024年最新【交安】公路水运安全员备考题库。
  • Excel 宏录制与VBA编程 —— 16、InputBox函数的使用方式
  • 【ai】tx2 nx : yolov4加入initLibNvInferPlugins构建
  • 【Proteus仿真】【Arduino单片机】基于物联网新能源电动车检测系统设计
  • MobaXterm破解专业版方法
  • 0基础学JMeter:如何开始简单的WEB压力测试(一)
  • ArcGIS数据处理与制图
  • 基于Java微信小程序校园订餐系统设计和实现(源码+LW+调试文档+讲解等)
  • 基于文件的本地数据库组件 DuckDB, ChDB, SQLite, LevelDB, RocksDB
  • 日志记录功能
  • Android中的多线程与线程池详解
  • 使用LangChain+Ollama自己做的一个和大语言模型聊天的网站支持上下文对话,学习记录。
  • excel数据透视
  • 七、(正点原子)Linux并发与竞争
  • vue2+TS,el-table表格单选的写法
  • 北邮《计算机网络》蒋老师思考题及答案-传输层
  • 学懂C#编程:常用高级技术【元组的详细使用】——利用元组获取多个返回值
  • 解决IDEA使用卡顿的问题,设置JVM内存大小和清理缓存
  • Python爬虫从入门到入狱之爬取知乎用户信息
  • apk反编译修改教程系列-----去除apk软件更新方法步骤列举 记录八种最常见的去除方法