zoukankan      html  css  js  c++  java
  • Spring循环依赖

    二级缓存的作用是确保生成的代理对象是唯一的,不能生成多个不同的代理对象

    AService:

    1. 实例化AService(new AService()) --> AService原始对象 --> 第三级缓存 <aService, AService的原始对象>

    1. 填充bService属性 --> 从单例池 --> 找不到 --> 创建 BService对应的Bean

    2. 填充cService属性 --> 从单例池 --> 找不到 --> 创建 CService对应的Bean

    3. 初始化后(AOP) --> aService代理对象

    4. 从二级缓存中取出AService的代理对象

    5. 添加单例池(第一级缓存)

     

    BService:

    1. 实例化BService(new BService()) --> BService原始对象

    1. 填充aService属性 --> 从单例池 --> 找不到 --> 二级缓存 --> 找不到且发现依赖的aService正在创建中(发生了循环依赖) --> AOP 生成 aService 代理对象(从第三级缓存中拿到AService原始对象,用来做AOP) --> 将代理对象放入第二级缓存earlySingletonObjects<aService,AService代理对象>中

    2. 填充其他属性

    3. 初始化后

    4. 添加单例池(第一级缓存)

     

    CService:

    1. 实例化CService(new CService()) --> BService原始对象

    1. 填充aService属性 --> 从单例池找 aService 对应的Bean --> 找不到 --> 二级缓存找 --> 找到AService代理对象

    2. 填充其他属性

    3. 初始化后

    4. 添加单例池(第一级缓存)

  • 相关阅读:
    哈希表存人名。。= =
    转载:风雨20年:我所积累的20条编程经验
    Beginning C# Objects:From Concepts to Code
    数据结构题集
    内部排序算法比较。。= =
    稀疏矩阵运算器
    断念
    .NET Reflector
    Andorid信息推送
    Project2010环境搭建
  • 原文地址:https://www.cnblogs.com/panning/p/13946760.html
Copyright © 2011-2022 走看看