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

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.xdnf.cn/news/5253.html

相关文章:

  • 【DLF】基于语言的多模态情感分析
  • 邮件群发中如何确保图片加载速度
  • Qt开发经验 --- 避坑指南(12)
  • vue配置代理解决前端跨域的问题
  • python环境搭建和pycharm的安装配置以及使用face_recognition与cv2
  • 一键智能AI抠图,释放创意无限可能
  • 自定义类型:结构体进阶
  • CANopen转Profinet网关,AGV可以无缝地与工厂的控制系统集成
  • Js 判断浏览器cookie 是否启用
  • C/C++复习--最易懂的C语言分支与循环语句--详解
  • 卫星导航算法程序设计——单点定位测速(SPV)
  • C语言_函数hook方案
  • Java学习手册:Spring Cloud 组件详解
  • 8.3.监控与日志体系
  • LAMMPS分子动力学基于周期扰动法的黏度计算
  • Spring事务融入(REQUIRED)具体实现步骤解析
  • 使用openlayers计算两个经纬度之间的距离 ,单位有米和千米
  • 区间 DP 详解
  • Java注解:深入探究理解与实践应用
  • SpringMVC-简介及入门
  • linux中常用的命令(三)
  • Java MCP 实战 --> AI玩转贪吃蛇
  • BUCK基本原理学习总结-20250509
  • JVM调优
  • python tkinter 实现 带界面(GUI)的RSA加密、签名
  • Linux终端展示效果优化:【whiptail】使用教程
  • 【目录】学习如何使用dify建设专业知识库
  • 【AI提示词】金字塔模型应用专家
  • 3.优惠券秒杀
  • c++类【高潮】