Spring解决bean之间的循环依赖(循环引用)

289 篇文章 447 订阅 ¥39.90 ¥99.00

在这里插入图片描述

2.概述

bean的实例化仅仅是获得了bean的实例,该bean仍在继续创建之中,之后在该bean实例的基础之上,还要做很多额外的操作,例如bean的属性填充、处理器的应用、bean的循环依赖解决等,今天我们就来分析下Spring是如何解决bean之间的循环依赖。

当ClassA引用ClassB,ClassB又引用ClassA,那么两个类之间就会形成一个闭环,导致循环依赖的出现。大家只需记住一点,Spring只能解决单例模式下的Setter循环依赖。

2.1 循环依赖种类

  1. 构造函数的循环依赖。这种依赖显然是解决不了的。在 A 的构造方法中依赖 B,在 B 的构造方法中依赖 A 是不行的。
  2. 非单例Bean的循环依赖。这种依赖也是解决不了的。
  3. 单例Bean的循环依赖。本文介绍的就是如何解决单例Bean的循环依赖的问题。

2.2 Spring怎么解决循环依赖

Spring 在处理属性循环依赖的情况时主要是通过延迟设置来解决的,当bean被实例化后,此时还没有进行依赖注入,当进行依赖注入的时候,发现依赖的bean已经处于创建中了,那么通过可以设置依赖,虽然依赖的be

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring框架采用依赖注入(DI)的方式来管理Bean,这种方式会解决Bean之间循环依赖问题。在Spring容器启动时,它会先创建所有的Bean的实例,但是并不会对所有的依赖关系进行完全的填充,而是在构建Bean实例的过程中动态地解决依赖关系,从而避免了循环依赖的问题。 当需要创建一个Bean时,会经过以下步骤: 1. 创建Bean实例:当需要创建一个Bean时,Spring会将其实例化,并创建相应的BeanDefinition对象,以描述Bean的属性、依赖关系等。 2. 填充Bean属性:在Bean实例创建后,Spring会将Bean的属性值注入到Bean实例中。如果某些属性需要其他Bean的引用作为依赖,则Spring会用一个叫做代理的对象替代这些属性,这样就避免了循环依赖。 3. 调用初始化方法:在Bean实例化和属性填充后,Spring会调用Bean的初始化方法(如果有的话)。 对于循环依赖的情况,Spring会在填充属性时采用一些特殊的机制来处理。比如,当第一个Bean需要引用第二个Bean实例时,Spring会先创建一个半成品的Bean实例,然后注入到第一个Bean中。当第一个Bean创建完成后,会将其作为参数传递给第二个Bean的构造函数或者setter方法,以完成第二个Bean的创建。这样,就避免了两个Bean之间循环依赖问题。 综上所述,Spring框架解决Bean的循环依赖问题的核心思想就是“先创建出半成品的Bean实例,然后在后续的构造器或setter方法中完成Beans之间的注入和填充”。这种方式可以解决循环依赖问题,同时也保证了Bean之间的正确依赖关系。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

九师兄

你的鼓励是我做大写作的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值