循环依赖和bean记载过程
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完成品对象(代理对象)。
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.