如何使用@Lazy解决循环依赖,写个示例
时间: 2023-12-13 09:03:17 浏览: 38
好的,下面是一个使用 @Lazy 解决循环依赖的示例:
```
@Component
public class A {
@Autowired
@Lazy
private B b;
public void test() {
b.doSomething();
}
}
@Component
public class B {
@Autowired
private A a;
public void doSomething() {
System.out.println("do something");
}
}
```
在上面的示例中,A 类依赖于 B 类,而 B 类又依赖于 A 类,出现了循环依赖的情况。通过在 A 类中使用 @Lazy 注解,可以延迟初始化 B 类的依赖,从而解决循环依赖的问题。需要注意的是,@Lazy 注解只有在单例模式下才有效。
相关问题
请举例说明使用@Lazy注解避免Spring boot 循环依赖
假设有如下情景:
类A依赖于类B,同时类B也依赖于类A。这样就形成了循环依赖。
为了解决这个问题,可以使用@Lazy注解,将类A或类B中的其中一个延迟加载。
例如,我们可以在类A中使用@Lazy注解,将类A延迟加载,这样在启动应用程序时,Spring容器不会立即加载类A,而是在需要使用类A的时候才会进行加载。这样就避免了循环依赖的问题。
示例代码如下:
```
@Component
public class A {
private final B b;
public A(@Lazy B b) {
this.b = b;
}
//...
}
@Component
public class B {
private final A a;
public B(A a) {
this.a = a;
}
//...
}
```
在类A中,我们使用了@Lazy注解,将类B延迟加载。这样在启动应用程序时,Spring容器不会立即加载类B,而是在需要使用类B的时候才会进行加载。
这样就避免了类A和类B之间的循环依赖问题。
@RequiredArgsConstructor(onConstructor_ = {@Lazy})为什么可以解决循环依赖
@RequiredArgsConstructor(onConstructor_ = {@Lazy})可以解决循环依赖的原因是因为它使用了懒加载。在循环依赖的情况下,如果使用默认的构造函数注入,会导致循环依赖的类无法被实例化,从而导致程序出错。而使用@Lazy注解可以将依赖的实例化推迟到第一次使用时,从而避免了循环依赖的问题。
下面是一个示例代码,演示了@RequiredArgsConstructor(onConstructor_ = {@Lazy})如何解决循环依赖的问题:
```java
// A类
@Component
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
public class A {
private final B b;
}
// B类
@Component
@RequiredArgsConstructor(onConstructor_ = {@Lazy})
public class B {
private final A a;
}
```
在上面的代码中,A类和B类相互依赖,如果使用默认的构造函数注入,会导致循环依赖的问题。但是,由于使用了@Lazy注解,依赖的实例化被推迟到第一次使用时,从而避免了循环依赖的问题。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.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)