spring循环依赖详解
2021-04-22 19:53:25 0 举报
spring循环依赖详解
作者其他创作
大纲/内容
A类
spring循环依赖解决,三级缓存存在类(DefaultSingletonBeanRegistry)
三级缓存中找到实例化的B
C类
随后回到B,B注入C完成属性注入然后初始化在getSingleton方法中加入一级缓存移除二级三级缓存
doGetBean方法寻找是否存在C实例
最后回到A,A成功注入B,然后再去注入C
populate填充属性发现有B
doGetBean方法寻找是否存在C实例
移除三级缓存B加入二级缓存
没有则创建C实例
总结:A看似创建最早其实是最晚进行创建的属性注入的过程中逐渐创建了B,C实例注意:getSingleton方法非常重要主要重载了2个方法也就是上面出现的两次
populate填充属性发现有A
getSingleton方法从缓存中寻找是否存在C实例
populate填充属性发现有C
getSingleton方法从缓存中寻找是否存在B实例
从一级缓存中直接找到C直接记性属性注入
依次查询一级二级三级缓存
创建A
getSingleton方法从缓存中寻找是否存在A实例
三级缓存中找到实例化的A
实例化后放入三级缓存
最后完成A的创建
没有则创建B实例
doGetBean方法寻找是否存在A实例
doGetBean方法寻找是否存在B实例
二级缓存中拿到直接注入
移除三级缓存A加入二级缓存
注入B后再初始化C,C创建结束加入一级缓存
B类
0 条评论
下一页