循环依赖

作者: Andy的故事 | 来源:发表于2021-03-14 06:56 被阅读0次

循环依赖是个典型的问题,我们看下在spring中是如何解决的

class A{    private B b;}

class B{    private A a;}

这个我们先分析一下bean在实例化过程中的几个阶段

①获取bean对应class的定义---获取A的class定义

②通过构造函数来反射生成对象---生成A对象

③设置对应的属性---设置B属性,又走一遍①②③步骤,这是就发生了循环引用

那我在第②步的时候设置一下缓存不就行了,等到第③步中实例化B对象需要A对象时,直接从缓存里面拿到A对象的引用就行了

这个里面只涉及到二级缓存,

一级:完整实例化对象的缓存(spring中的singletionObjects)

二级:未填充属性的实例化的对象的缓存(spring中的earlySingletionObjects)

我们看了下spring中,用到了三级缓存,为什么要用到三级缓存呢?

还是看看三级缓存里面存放的是什么

三级:未填充属性的实例化的原类对象的缓存 或者  未填充属性的实例化的原类的代理对象(singletionFactories)

主要是对AOP的处理(BeanPostProcessor)

个人理解:不一定对

        ①其实通过一级和二级缓存也是可以的,只不过在实例化的过程就要真实的处理AOP

        ②而spring对bean的生命周期的管理,是在实例化之后才进行AOP的处理,如果不采用三级缓存,那么对bean生命周期的管理就不统一了

以上属个人观点,欢迎大家讨论,随着理解的加深,可能会有更有说服力的结论给出

相关文章

  • Spring 是如何解决循环依赖的?

    Spring 是如何解决循环依赖的? 循环依赖: Spring 循环依赖有三种情况: 构造器的循环依赖,这种依赖 ...

  • Spring-IOC-循环依赖检测与Bean的创建

    Spring容器的循环依赖检测 Spring容器循环依赖包括:构造器循环依赖和setter循环依赖。 1- 构造器...

  • Spring 对于循环依赖的处理

    什么是循环依赖 循环依赖就是循环引用,就是两个或者多个bean相互之间的持有对方。 循环依赖的类型 构造器循环依赖...

  • Spring源码解析之循环依赖

    什么是循环依赖 简单的说就是A依赖B,B依赖C,C依赖A这样就构成了循环依赖 循环依赖分为构造器依赖和属性依赖,众...

  • 一文详解Spring中的循环依赖,面试必杀技

    目录 前言 什么是循环依赖? 什么情况下循环依赖可以被处理? Spring是如何解决的循环依赖? 简单的循环依赖(...

  • Spring之循环依赖及解决方式

    1.Spring循环依赖 循环依赖指Spring对象之间的循环引用,最终形成死循环。举例: A依赖于B,B依赖于C...

  • 循环依赖

    循环依赖 1、循环依赖的介绍 循环依赖,bean之间相互持有各自的引用,最终形成闭环。比如 bean的实例化有如下...

  • 循环依赖

    https://zhuanlan.zhihu.com/p/62382615[https://zhuanlan.zh...

  • 循环依赖

    循环依赖就是N个类中循环嵌套引用,先考虑一下,面对对面编程,这是一个自然的概念吗?你中有我,我中有你,面向对象。如...

  • 循环依赖

    循环依赖是个典型的问题,我们看下在spring中是如何解决的 class A{ private B b;}cla...

网友评论

    本文标题:循环依赖

    本文链接:https://www.haomeiwen.com/subject/hmztcltx.html