Spring Boot解决循环依赖的几种办法

说明:Spring Boot 循环依赖,是指两个或两个以上的 Bean 对象,你装配我,我装配你,形成一个循环,导致项目启动时,无法完成 Bean 的初始化,报下面这种错误。

本文介绍解决循环依赖的几种方法

场景

创建了两个 Service 实现类,互相注入对方

解决方法一

最简单,最快捷的,是在其中一个 Bean 装配时,加上 @Lazy 注解,懒加载,如下:

解决方法二

重构代码,引入中间层,将互相使用到的方法加入到新的 Service 中,然后装配这个新的 Service,如下:

为了解决 Service1、Service2 之间的循环依赖,要额外创建两个 Service,结构如下:

(重构前)

(重构后:将 Service1、Service2 中互相调用的代码搬到 Service3、Service4中)

解决方法三

不要用自动装配,手动从 Spring 容器中获取,如下:

相关推荐
逑之1 分钟前
C语言笔记9:指针
java·c语言·笔记
廋到被风吹走5 分钟前
【Spring】AOP深度解析:代理机制、拦截器链与事务失效全解
java·spring·缓存
superman超哥5 分钟前
自定义迭代器的实现方法:深入Rust迭代器机制的核心
开发语言·后端·rust·编程语言·rust迭代器机制·自定义迭代器
superman超哥8 分钟前
IntoIterator Trait的转换机制:解锁Rust迭代器生态的关键
开发语言·后端·rust·编程语言·rust trait·rust迭代器·trait转换机制
没有天赋那就反复9 分钟前
JAVA length
java·开发语言·算法
qq_2562470512 分钟前
拒绝封号风险:用 Docker 混合架构实现 Gemini CLI 安全多开
后端
步步为营DotNet17 分钟前
深度探索.NET 中ValueTask:优化异步性能的轻量级利器
java·spring·.net
栈与堆20 分钟前
LeetCode-88-合并两个有序数组
java·开发语言·数据结构·python·算法·leetcode·rust
董世昌4123 分钟前
添加、删除、替换、插入元素的全方法指南
java·开发语言·前端
ZePingPingZe24 分钟前
SpringMVC与Servlet容器[Tomcat]
spring boot·servlet·tomcat