阿里面试官居然不懂Spring是如何处理循环依赖的?
来源:     阅读:450
易浩激活码
发布于 2022-03-15 14:08
查看主页

BeanPostProcessor的after方法中会完成动态代理商对象的创立。

当Bean产生循环依赖时,比方BeanA的构造方法依赖BeanB作为成员需要注入,BeanB也依赖BeanA,你觉得会出现什么问题呢?又有哪些处理方式呢?

通过set方法去解决,背后的原理其实是缓存。
主要处理方式:

三级缓存

singletonObjects

一级缓存, Cache of singleton objects
bean name --> bean instance。
存放完整对象。

earlySingletonObjects

二级缓存, Cache of early singleton objects
bean name --> bean instance 提前曝光的BEAN缓存。
存放半成品对象。

singletonFactories

三级缓存, Cache of singleton factories
bean name --> ObjectFactory。需要的对象被代理商时,就必需使用三级缓存(否则二级就够了)。处理循环依赖中存在aop的问题
存放 lambda 表达式和对象名称的映射。

带着aop的实现来重新走一下刚刚执行的逻辑, 体会各个对象在程序运行过程中的流转过程,对象的三个缓存中的迁移过程,画个图,总结下,debug下,
起始断点的入口在:finishBeanFactorylnitialization方法。


image
免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 软件环境
相关推荐
数据科学 IPython 笔记本 四、Keras(下)
Ubuntu 屏幕录制噪音解决
7-Openwrt uci system
IPSec VPN配置
Android 写一个属于自己的富文本编辑器
首页
搜索
订单
购物车
我的