BaseTypeHandler 中引用 Mapper 导致循环依赖:构造器注入报错及解决方法
循环依赖是指两个或多个对象之间互相依赖,无法在构造函数中实例化。在 BaseTypeHandler 中引用 Mapper 可能会导致循环依赖,从而在构造器注入时报错。以下介绍两种解决循环依赖问题的方案:
-
Setter 注入:将循环依赖的对象的 setter 方法注入到另一个对象中。
例如,假设我们有两个类 A 和 B,它们相互依赖:
public class A { private B b; public void setB(B b) { this.b = b; } } public class B { private A a; public void setA(A a) { this.a = a; } }然后,在使用这两个类的地方,使用 setter 方法进行注入:
A a = new A(); B b = new B(); a.setB(b); b.setA(a);这样就解决了循环依赖的问题。
-
使用 @Autowired 注解配合 @Lazy 注解:在循环依赖的对象上使用 @Autowired 注解进行自动注入,并使用 @Lazy 注解延迟加载。
例如,假设我们有两个类 A 和 B,它们相互依赖:
public class A { @Autowired @Lazy private B b; } public class B { @Autowired @Lazy private A a; }这样,在使用这两个类的地方,Spring 会自动进行注入,并解决循环依赖的问题。
请注意,以上两种方法只适用于 Spring 容器中的循环依赖问题。如果是在其他环境下,可以考虑通过重构代码来解决循环依赖。
原文地址: https://www.cveoy.top/t/topic/pTYk 著作权归作者所有。请勿转载和采集!