Spring Boot的循环依赖问题

目录

1.循环依赖的概念

2.解决循环依赖的方法

1.构造器方法注入:

2.@Lazy注解

3.@DependsOn注解


1.循环依赖的概念

两个或多个bean之间互相依赖,形成循环,此时,Spring容器无法确定先实例化哪个bean,导致循环依赖的问题。

代码示例:

java 复制代码
@Service
public class A{

    private B b;
    
    @Autowired
    public A(B b){
        this.b = b;
    }

}

@Service
public class B{

    private A a;

    @Autowired
    public B(A a){
        this.a = a;
    }

}

可以看到代码中,A的对象创建需要先实例化B的对象,而B的对象也需要先实例化A,此时形成了循环依赖。

2.解决循环依赖的方法

1.构造器方法注入:

在构造器中注入,解决循环依赖问题

java 复制代码
public class Main {
    public static void main(String[] args) {
        ClassB classB = new ClassB(null);
        ClassA classA = new ClassA(classB);
        classB.setClassA(classA);
    }
}

2.@Lazy注解

@Lazy注解具有延迟加载的功能,能够在需要该bean时再进行实例化

java 复制代码
@Service
@Lazy
public class A{

    private B b;
    
    @Autowired
    public A(B b){
        this.b = b;
    }

}

@Service
@Lazy
public class B{

    private A a;

    @Autowired
    public B(A a){
        this.a = a;
    }

}

3.@DependsOn注解

@DependsOn注解能够指定依赖项的加载顺序,从而避免循环依赖问题

如下代码中:@DependsOn("B")指定了A依赖于B,在实例化A之前,必须先实例化B,避免了循环依赖问题

java 复制代码
@Service
@DependsOn("B")
public class A{

    private B b;
    
    @Autowired
    public A(B b){
        this.b = b;
    }

}

@Service
@Lazy
public class B{

    private A a;

    @Autowired
    public B(A a){
        this.a = a;
    }

}
相关推荐
umeelove3514 小时前
Spring 循环依赖
java·后端·spring
用户32951257590614 小时前
Day05-数组和面向对象基础
java
Du_chong_huan14 小时前
《计算机网络:自顶向下方法》第 2 章 应用层|核心知识梳理 + 原版习题解析
后端·asp.net
若鱼191914 小时前
SpringBoot4+Kafka4 - 生产环境故障 - 消费者执行时间太长导致消息无限循环投递
java·spring·kafka
serve the people14 小时前
LLaMA-Factory微调数据的清洗与指令构造方法
java·服务器·llama
百度一见14 小时前
2026年CRAIC“百度智能云智能服务机器人赛”正式启动!
后端·百度·机器人
小王不爱笑13214 小时前
HashMap 扩容全流程
java·数据结构·算法
阿崽meitoufa14 小时前
抽象类 接口 内部类
java·开发语言
代码探秘者14 小时前
【算法篇】4.前缀和
java·数据库·后端·python·算法·spring