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.pswp.cn/bicheng/80438.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/80438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA自动装箱拆箱

引言 Java 中的**装箱(Boxing)和拆箱(Unboxing)**是自动类型转换的机制,用于在基本数据类型(如 int、long 等)和其对应的包装类(如 Integer、Long 等)之间进行转换。这种…

如何阅读、学习 Linux 2 内核源代码 ?

学习Linux 2内核源代码是深入理解操作系统工作原理的绝佳途径,但这无疑是一项极具挑战性的任务。下面为你提供一套系统的学习方法和建议: 一、扎实基础知识 操作系统原理 透彻掌握进程管理、内存管理、文件系统、设备驱动等核心概念。推荐阅读《操作系…

树莓派4的v4l2摄像头(csi)no cameras available,完美解决

根据2025年最新技术文档和树莓派官方支持建议,no cameras available错误通常由驱动配置冲突或硬件连接问题导致。以下是系统化解决方案: 一、核心修复步骤 强制禁用传统驱动 sudo nano /boot/firmware/config.txt确保包含以下配置(2025年新版…

c++学习之路(3)

通过《c学习之路(2)》的学习,我们已经掌握了数据的储存,以及数据的读入与输出,这次课程,我们要学习if语句的使用方法以及逻辑表达式请各位学者做好准备,谢谢配合!!&#…

Java程序题案例分析

目录 一、基础语法 1. 类与对象 2. 接口与抽象类 二、面向对象语法 1. 继承与多态 2. 四种访问修饰符 三、设计模式相关语法 一、策略模式(接口回调实现) 1. 完整实现与解析 二、工厂模式(静态工厂方法实现) 1. 完整实…

comfyu BiRefNet-General模型下载及存放地方

https://huggingface.co/ZhengPeng7/BiRefNet/tree/main

HunyuanCustom:文生视频框架论文速读

《HunyuanCustom: A Multimodal-Driven Architecture for Customized Video Generation》论文讲解 一、引言 本文提出了 HunyuanCustom,这是一个基于多模态驱动的定制化视频生成框架。该框架旨在解决现有视频生成模型在身份一致性(identity consistenc…

tryhackme——Enumerating Active Directory

文章目录 一、凭据注入1.1 RUNAS1.2 SYSVOL1.3 IP和主机名 二、通过Microsoft Management Console枚举AD三、通过命令行net命令枚举四、通过powershell枚举 一、凭据注入 1.1 RUNAS 当获得AD凭证<用户名>:<密码>但无法登录域内机器时&#xff0c;runas.exe可帮助…

Web3 学习全流程攻略

目录 🧭 Web3 学习全流程攻略 🌱 第一阶段:打好基础(Web3 入门) 🧠 目标: 📚 学习内容: ✅ 推荐资源: 🧑‍💻 第二阶段:技术栈搭建(成为 Web3 开发者) 🧠 目标: 📚 学习内容: ✅ 推荐资源: 🌐 第三阶段:构建完整 DApp(去中心化应用)…

Python程序打包为EXE文件的全面指南

Python程序打包为EXE文件的全面指南 Python程序打包为EXE文件是解决程序分发和环境依赖问题的有效方法。通过将Python脚本及其所有依赖项整合为单一可执行文件&#xff0c;用户无需安装Python解释器即可直接运行程序&#xff0c;极大提升了应用的便携性和用户体验。本文将深入…

22、城堡防御工事——React 19 错误边界与监控

一、魔法护盾&#xff1a;错误边界机制 1. 城墙结界&#xff08;Error Boundary&#xff09; // 客户端错误边界use client function useErrorBoundary() {const [error, setError] useState(null);​const handleError useCallback((error, errorInfo) > {setError(erro…

深入理解 Istio 的工作原理 v1.26.0

解读最新版本的 Istio 源码确实是一项庞大的工程&#xff0c;但我可以为你梳理出一个清晰的脉络&#xff0c;并指出关键模块和代码路径&#xff0c;帮助你深入理解 Istio 的工作原理。 我们主要关注 Istio 的核心组件 Istiod 和数据平面的 Envoy Proxy。 前提&#xff1a; Go…

Flask 调试的时候进入main函数两次

在 Flask 开启 Debug 模式时&#xff0c;程序会因为自动重载&#xff08;reloader&#xff09;的机制而启动两个进程&#xff0c;导致if __name__ __main__底层的程序代码被执行两次。以下说明其原理与常见解法。 Flask Debug 模式下自动重载机制 Flask 使用的底层服务器 Wer…

CSS--图片链接垂直居中展示的方法

原文网址&#xff1a;CSS--图片链接垂直居中展示的方法-CSDN博客 简介 本文介绍CSS图片链接垂直居中展示的方法。 图片链接 问题复现 源码 <html xml:lang"cn" lang"cn"><head><meta http-equiv"Content-Type" content&quo…

雷赛伺服L7-EC

1电子齿轮比&#xff1a; 0x608F-01 只读&#xff0c;编码器圈脉冲【0x20000】【131072】 //Er1B1齿轮比错误 ----------------------------------- 0x6092-01 圈脉冲 //重新使能生效【pa008必须是0】值越小&#xff0c;转的越多 -----------------------…

在js中大量接口调用并发批量请求处理器

并发批量请求处理器 ✨ 设计目标 该类用于批量异步请求处理&#xff0c;支持&#xff1a; 自定义并发数请求节拍控制&#xff08;延时&#xff09;失败重试机制进度回调通知 &#x1f527; 构造函数参数 new BulkRequestHandler({dataList, // 要处理的数据列表r…

K8S扩缩容及滚动更新和回滚

目录&#xff1a; 1、滚动更新1、定义Deployment配置2、应用更新 2、版本回滚1. 使用kubectl rollout undo命令 3、更新暂停与恢复1、暂停更新2、更新镜像&#xff08;例如&#xff0c;使用kubectl set image命令&#xff09;3、恢复更新 4、弹性扩缩容1、扩容命令2、缩容命令3…

力扣-24.两两交换链表中的结点

题目描述 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 class Solution { public:ListNode* swapPairs(ListNode* head) {i…

对遗传算法思想的理解与实例详解

目录 一、概述 二、实例详解 1&#xff09;问题描述与分析 2&#xff09;初始化种群 3&#xff09;计算种群适应度 4&#xff09;遗传操作 5&#xff09;基因交叉操作 6&#xff09;变异操作 三、计算结果 四、总结 一、概述 遗传算法在求解最优解的问题中最为常用&a…

计算机图形学编程(使用OpenGL和C++)(第2版) 学习笔记 07.光照

1. 光照 1.1. 光源 光源类型特点优点缺点环境光整个场景均匀受光&#xff0c;无方向和位置。模拟全局光照&#xff0c;避免完全黑暗的区域。缺乏方向性和真实感&#xff0c;无法产生阴影。平行光光线方向平行&#xff0c;无位置&#xff0c;仅有方向。计算简单&#xff0c;适…