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

spring 使用三级缓存解决循环依赖详解

前言

在spring 2.6之前的版本中,默认都是支持循环依赖的,也就不会报错,在2.6版本之后默认禁用了循环依赖;可通过以下方式开启循环依赖

spring:main:allow-circular-references: true # 开启循环依赖, false (默认)表示禁用循环依赖

复现

比如有以下2个类,A引用了B,B引用了A;

A.java

@Service
public class B{@Autowriedprivate B b;
}

B.java

@Service
public class B{@Autowriedprivate A a;
}

默认情况下启动spring就会抛出循环依赖的异常

***************************
APPLICATION FAILED TO START
***************************Description:The dependencies of some of the beans in the application context form a cycle:┌─────┐
|  a (field private com.spring.service.B com.spring.service.A.b)
↑     ↓
|  b (field private com.spring.service.A com.spring.service.B.a)
└─────┘Action:Relying upon circular references is discouraged and they are prohibited by default. Update your application to remove the dependency cycle between beans. As a last resort, it may be possible to break the cycle automatically by setting spring.main.allow-circular-references to true.

三级缓存

先说下三级缓存的作用

  • 一级缓存:实例化且属性已注入完成的Bean
  • 二级缓存:
    在这里插入图片描述

三级缓存的执行流程如下:
在这里插入图片描述

解决

这里有2种解决方案

1、添加懒加载注解 @Lazy

用法如下

@Service
public class B {@Autowired@Lazyprivate A a;
}

2、启用循环依赖的配置

在application.yml 文件加上以下配置即可

spring:main:allow-circular-references: true
http://www.dtcms.com/a/304642.html

相关文章:

  • 09 RK3568 Debian11 ES8388 模拟音频输出
  • 【腾讯云】EdgeOne免费版实现网站加速与安全防护
  • AI定义2025世界人工智能大会,腾讯/微美全息立足浪潮催生开源模型生态产业
  • 飞书 —— 多维表格 —— AI生成
  • 【术语扫盲】MCU与MPU
  • Spring框架中自定义标签的解析过程
  • 关于“高帧率放大了模型对位置噪声的敏感性”的理解
  • Kubernetes 全面解析:从基础设施变革到核心架构详解
  • Dify 从入门到精通(2/100 篇):Dify 的核心组件 —— 从节点到 RAG 管道
  • 利用 C# 实现 Word 文档多维度统计(字数、字符数、页数、段落数、行数)
  • 当 AI 重构审计流程,CISA 认证为何成为破局关键
  • 计算机视觉-图像基础处理
  • 双引擎驱动智能检索:混合搜索如何重构RAG系统底层逻辑
  • 智能健康项链专利拆解:ECG 与 TBI 双模态监测的硬件架构与信号融合
  • 算法提升之数论(矩阵+快速幂)
  • 隐藏文件行尾符CRLF
  • PostgreSQL缓冲区管理器
  • 2-verilog-基础语法
  • AI: 告别过时信息, 用RAG和一份PDF 为LLM打造一个随需更新的“外脑”
  • go install报错: should be v0 or v1, not v2问题解决
  • React图标库推荐与选择建议
  • 【Spring-cloud-OpenFegin源码解析】
  • VitePress学习笔记
  • 编程算法在金融、医疗、教育、制造业的落地应用。
  • 云服务器上基于lora微调Qwen2.5-VL-7b-Instruct模型之Lora微调代码讲解
  • Netty中InternalThreadLocalMap的作用
  • Rust实现GPU驱动的2D渲染引擎
  • Vue3 学习教程,从入门到精通, Vue3 自定义指令语法知识点及案例(20)
  • c++ nlohmann/json读写json文件
  • JavaWeb学习打卡18(JDBC案例详解)