spring启动创建bean时 如果该类引用了这个bean 不过没有去使用 为什么会报循环依赖异常

Spring 框架在进行 bean 的创建和依赖注入时,会在容器启动时解析所有的 bean 定义,创建相应的 bean 实例,并维护一个 bean 的创建状态。当 Spring 发现存在循环依赖时,会抛出循环依赖异常。

循环依赖是指两个或多个 bean 之间互相引用,形成一个闭环的依赖关系。例如,假设 beanA 依赖于 beanB,而 beanB 又依赖于 beanA,这样就形成了循环依赖。当 Spring 容器在创建 beanA 时,会尝试去创建 beanB,并注入到 beanA 中;而在创建 beanB 时,会尝试去创建 beanA,并注入到 beanB 中。由于 beanA 和 beanB 彼此依赖,互相等待对方创建完成,从而导致了循环依赖的发生。

在这种情况下,如果 beanA 在创建过程中引用了 beanB,即使没有去使用,Spring 也会报循环依赖异常。这是因为 Spring 在创建 bean 时会维护一个创建状态,一旦发现存在循环依赖,就会立即抛出异常,防止出现潜在的死锁或无限循环等问题。

解决循环依赖的方法包括:

  1. 通过构造函数注入或字段注入代替 setter 方法注入,因为构造函数在对象创建时就会被调用,避免了循环依赖的问题。
  2. 使用 @Lazy 注解延迟加载 bean,使得 bean 的实例化在实际使用时才进行。
  3. 使用 setter 方法注入并将其中一个循环依赖关系改为懒加载,通过使用 AOP(面向切面编程)或者代理模式来解决循环依赖的问题。

需要注意的是,虽然 Spring 提供了一些解决循环依赖的方法,但最佳实践是尽量避免出现循环依赖,从而减少潜在的问题和复杂性。合理设计和规划 bean 之间的依赖关系,可以避免循环依赖导致的异常和其他潜在的问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值