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. 添加单例池(第一级缓存)

  • 相关阅读:
    让 .Net 程序 脱离 .net framework框架 运行的方法 转
    MySpaces性能提高的过程转
    AskNet 内容查询系统 筹备中
    关于自定义表单的一些想法
    Url重写
    show一下我的办公桌
    IronRuby 初览
    微软将终止对SQL2000的支持
    WCF 消息交换 转
    感受刘德华的努力
  • 原文地址:https://www.cnblogs.com/panning/p/13946760.html
Copyright © 2011-2022 走看看