当前位置: 首页 > 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,而是使用到的时候创建。

 

相关文章:

  • 单脉冲前视成像多目标分辨算法——论文阅读
  • 管道-验证和转换
  • 【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小程序中实现无缝衔接滚动效果
  • 上海“量子城市”先导应用场景落地曹杨社区,提供哪些服务?
  • 春秋航空:如果供应链持续改善、油价回落到合理水平,公司补充运力的需求将会增长
  • 央行:当前我国债券市场定价效率、机构债券投资交易和风险管理能力仍有待提升
  • 第32届梅花奖终评启幕,上海京剧院《智取威虎山》满堂彩
  • 读图|展现城市品格,上海城市影像走进南美
  • 万玲、胡春平调任江西省鹰潭市副市长