Bean加载示例说明

涉及循环依赖和代理的Bean加载

例子:对象A和对象B相互循环依赖,且都有代理。

  • A实例化;
  • 用对象工厂封装A的实例化对象,将A的工厂对象加入第三级缓存;
  • A属性注入(需注入属性B),
  • 发现需要先加载B;
  • B实例化;
  • 用对象工厂封装B的实例化对象,将B的工厂对象加入第三级缓存;
  • B属性注入(需注入属性A);
  • 通过A的工厂对象得到A代理对象,将A代理对象加入第二级缓存(此时A还是半成品),并从第三级缓
  • 存移除A工厂对象,。
  • B完成属性注入(注入的是A代理对象);
  • B初始化,生成B的代理对象;
  • B代理对象加入第一级缓存,并从第三级缓存移除B工厂对象;
  • 得到B完成品对象(代理对象);
  • A完成属性注入;
  • A初始化;
  • A代理对象加入第一级缓存,并从第二级缓存移除A代理对象;
  • 得到A完成品对象(代理对象)。