【Spring Boot】Spring Boot解决循环依赖

【SpringBoot】SpringBoot解决循环依赖🔄

在SpringBoot开发中,循环依赖(CircularDependency)是一个常见但令人头疼的问题😫。当两个或多个Bean相互依赖时,就会形成循环依赖。本文将介绍几种解决方案💡。

什么是循环依赖?🤔

```java
@Service
publicclassServiceA{
@Autowired
privateServiceBserviceB;
}

@Service
publicclassServiceB{
@Autowired
privateServiceAserviceA;
}
```

上面的代码中,ServiceA依赖ServiceB,而ServiceB又依赖ServiceA,形成了典型的循环依赖🔁。

解决方案

1.使用构造器注入🏗️

```java
@Service
publicclassServiceA{
privatefinalServiceBserviceB;

publicServiceA(ServiceBserviceB){
this.serviceB=serviceB;
}
}

@Service
publicclassServiceB{
privatefinalServiceAserviceA;

publicServiceB(ServiceAserviceA){
this.serviceA=serviceA;
}
}
```

Spring官方推荐使用构造器注入,它能更早发现循环依赖问题🚨。

2.使用@Lazy延迟加载⏳

```java
@Service
publicclassServiceA{
@Autowired
@Lazy
privateServiceBserviceB;
}
```

`@Lazy`注解可以延迟Bean的初始化,打破循环依赖链🔗。

3.使用Setter/方法注入🛠️

```java
@Service
publicclassServiceA{
privateServiceBserviceB;

@Autowired
publicvoidsetServiceB(ServiceBserviceB){
this.serviceB=serviceB;
}
}
```

Setter注入比字段注入更灵活,能解决部分循环依赖问题✨。

4.重构设计🧩

最佳实践是重新设计代码结构,避免循环依赖:

-提取公共逻辑到第三个类中
-使用接口隔离
-应用依赖倒置原则

总结🎯

SpringBoot默认支持单例作用域下的Setter/字段注入方式的循环依赖,但不推荐依赖这种机制🚧。优先考虑构造器注入和代码重构,这才是更健壮的解决方案💪。

记住:良好的设计比解决循环依赖更重要!🌟

相关推荐
涡能增压发动积20 小时前
同样的代码循环 10次正常 循环 100次就抛异常?自定义 Comparator 的 bug 让我丢尽颜面
后端
云烟成雨TD20 小时前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
Wenweno0o20 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
于慨20 小时前
Lambda 表达式、方法引用(Method Reference)语法
java·前端·servlet
swg32132120 小时前
Spring Boot 3.X Oauth2 认证服务与资源服务
java·spring boot·后端
tyung20 小时前
一个 main.go 搞定协作白板:你画一笔,全世界都看见
后端·go
gelald20 小时前
SpringBoot - 自动配置原理
java·spring boot·后端
殷紫川20 小时前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java
一轮弯弯的明月20 小时前
贝尔数求集合划分方案总数
java·笔记·蓝桥杯·学习心得
chenjingming66621 小时前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter