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

Spring循环依赖问题

个人理解,有问题欢迎指正。

        Spring 生命周期中,首先使用构造方法对 bean 实例化,实例化完成之后才将不完全的 bean放入三级缓存中提前暴露出 bean,然后进行属性赋值,此时容易出现循环依赖问题。

由此可见,Spring 使用三级缓存能够解决循环依赖的场景有:

1.属性赋值-属性赋值

2.先属性赋值-后构造方法

但是以下场景中,由于在构造方法中进行属性注入,此时 beanA 还未被实例化,三个级别的缓存中都不存在该 beanA,此时属性注入过程中创建属性 beanB时找不到循环依赖的bean A,因此而报错。

1.先构造方法-后构造方法

2.先构造方法-后属性复制

例如:

@Service
@AllArgsConstructor
public class CommentServiceImpl{@Resourceprivate IUserService userService;
}@Slf4j
@Service
public class UserServiceImpl{@Resourceprivate IAsyncUserInfoService asyncUserInfoService;
}@Service
public class AsyncUserInfoService{@Resourceprivate ICommentService commentService;
}

解决方法推荐编码解决,也可在其中任意循环节点 bean 注入上加@Lazy 懒加载注解解决,原理是在有@Lazy 注解时,spring容器启动时不创建该bean,而是使用到的时候创建。

 

http://www.dtcms.com/a/182544.html

相关文章:

  • 单脉冲前视成像多目标分辨算法——论文阅读
  • 管道-验证和转换
  • 【Linux】冯诺依曼体系结构和操作系统的理解
  • 23、DeepSeekMath论文笔记(GRPO)
  • 【桌面】【输入法】常见问题汇总
  • 高精度之加减乘除之多解总结(加与减篇)
  • 【软件工程】基于频谱的缺陷定位
  • C++学习-入门到精通-【6】指针
  • SSM框架整合MyBatis-Plus的步骤和简单用法示例
  • 助力你的Neovim!轻松管理开发工具的魔法包管理器来了!
  • C# 参数
  • 判断点是否在立方体内
  • 贪心算法专题(Part1)
  • DeepSeek 实现趣味心理测试应用开发教程
  • 【CF】Day56——Codeforces Round 940 (Div. 2) and CodeCraft-23 BCD
  • 《从零开始:构建你的第一个区块链应用》
  • Spring 6.x 详解介绍
  • STM32单片机的快速成长路径规划
  • 深入解析C++11 auto 关键字:类型推导的现代实践
  • uniapp小程序中实现无缝衔接滚动效果
  • Nginx高级配置
  • 用go从零构建写一个RPC(仿gRPC,tRPC)--- 版本2
  • 宝蓝德中间件部署war包时,配置的绝对路径读取错误。
  • LabVIEW多通道并行数据存储系统
  • llama.cpp无法使用gpu的问题
  • 基于CNN卷积神经网络的带频偏QPSK调制信号检测识别算法matlab仿真
  • Redis 集群
  • 视觉革命来袭!ComfyUI-LTXVideo 让视频创作更高效
  • Java常用类概述
  • 【STM32 学习笔记】USART串口