请举例说明使用接口隔离避免Spring boot 循环依赖
时间: 2024-05-02 19:17:40 浏览: 26
假设有两个类A和B,它们之间存在循环依赖:
```java
public class A {
private final B b;
public A(B b) {
this.b = b;
}
}
public class B {
private final A a;
public B(A a) {
this.a = a;
}
}
```
这时候,如果直接在Spring Boot中注入A和B,就会出现循环依赖的问题。为了解决这个问题,可以使用接口隔离。
首先,定义一个接口,包含A和B类中需要使用的方法:
```java
public interface Service {
void doSomething();
}
```
然后,在A和B类中分别注入Service接口:
```java
public class A {
private final Service service;
public A(Service service) {
this.service = service;
}
}
public class B {
private final Service service;
public B(Service service) {
this.service = service;
}
}
```
最后,在Spring Boot中注入Service实现类:
```java
@Service
public class ServiceImpl implements Service {
private final A a;
private final B b;
public ServiceImpl(A a, B b) {
this.a = a;
this.b = b;
}
@Override
public void doSomething() {
// ...
}
}
```
通过这种方式,A和B类不再直接依赖于彼此,而是依赖于同一个接口。同时,Spring Boot也能够正确地注入A、B和ServiceImpl,避免了循环依赖的问题。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)