Spring中循环依赖

Spring中循环依赖

Spring中循环依赖通常发生在以下场景中:

说明一

  1. 构造方法循环依赖:当Bean A和Bean B之间存在构造方法循环依赖时,Spring无法确定Bean A和Bean B的实例化顺序,从而抛出循环依赖的异常。

  2. 单例Bean循环依赖:当两个单例Bean之间存在循环依赖时,Spring容器在加载Bean时会将一个Bean的实例化放到缓存中,等待另一个Bean实例化后再将其注入,但是因为循环依赖的原因,这个过程会出现死锁,导致加载失败。

  3. prototype Bean循环依赖:当两个prototype Bean之间存在循环依赖时,Spring容器每次都会创建新的实例,无法缓存,但是因为循环依赖的原因,创建的实例会被传递给另一个Bean,导致出现错误。

总之,循环依赖是Spring容器中的一个常见问题,需要谨慎解决。一般情况下,可以通过使用lazy-init属性或者通过构造方法注入来避免或解决循环依赖问题。
Spring中循环依赖的出现场景:

说明二

  1. 构造函数循环依赖:当A类的构造函数依赖于B类,而B类的构造函数依赖于A类时,就会发生构造函数循环依赖。

  2. 属性循环依赖:当A类中的属性依赖于B类,而B类的属性依赖于A类时,就会发生属性循环依赖。

解决方案:

1. 通过Setter注入解决:将循环依赖的属性通过Setter方法注入。

  1. 通过@Lazy注解解决:通过给依赖注入的Bean添加@Lazy注解,将Bean的实例化延迟到第一次使用时再进行。

  2. 通过构造器注入解决:在构造函数中注入对方的Bean实例。

  3. 通过@DependsOn注解解决:通过@DependsOn注解指定Bean实例依赖的另外一个Bean实例,Spring将优先实例化被指定的Bean实例。

需要注意的是,解决循环依赖的方式不同,会对Bean的初始化顺序和性能产生影响,应根据具体场景选择最优解决方案。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我的头发哪去了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值