zoukankan      html  css  js  c++  java
  • Spring解决循环依赖的理解

    ▐ Spring

    Spring是自动创建对象场景的典型,它采用三级缓存的方式解决循环引用对象的创建。

    一级缓存:已经完全创建好的对象的缓存;

    二级缓存:正在创建中,某些成员还未装载的对象的缓存;

    三级缓存:存放创建对象方法的缓存(即存放工厂,而非对象的缓存)。

    假定类A对象引用类B对象,类B对象引用类A对象,在创建类A对象的过程中,需要装载B对象,这时首先会在一级缓存中寻找B对象,若没有,则在二级缓存在找,若依然没有,则会从三级缓存找到创建B的方法,并创建一个"裸"bean(未装载成员对象的bean),放进二级缓存,然后将这个对象装载给A对象,同时还会将三级缓存中创建B的方法移除,防止重复创建,最后将A对象放入一级缓存。创建B对象时,直接在一级缓存中即可找到A对象进行装载,最后再将自己放入一级缓存中。

    实际整个过程中,二级缓存承担的是解决循环引用问题的角色,个人理解三级缓存主要是为了实现上的优雅而存在的,没有也不影响循环引用问题的解决。

  • 相关阅读:
    管理经济学
    第五章 文件管理
    内存管理
    第三章 进程调度与死锁
    操作系统概论 第二章
    计算机系统
    企业与政府信息资源管理
    信息资源管理的标准与法规
    议论文
    如何从大量的 url 中找出相同的 url
  • 原文地址:https://www.cnblogs.com/JohnsonLiu/p/15391918.html
Copyright © 2011-2022 走看看