- 1
- 0
- 约6.79千字
- 约 9页
- 2026-10-14 发布于河北
- 举报
Spring高级面试题及详细答案(实战版)
一、Spring核心原理高级考点
1.详细说说SpringIoC的三级缓存原理,以及为什么需要三级缓存,二级缓存能不能解决循环依赖?
答案:
SpringIoC容器解决单例Bean的Setter/字段循环依赖,核心依靠三级缓存机制,三级缓存存储的内容各司其职:
一级缓存(singletonObjects):存放完全初始化完成、属性填充完毕、可直接使用的完整单例Bean。
二级缓存(earlySingletonObjects):存放已经实例化、但未完成属性填充和初始化的原始Bean对象(半成品Bean),目的是避免重复创建Bean引用。
三级缓存(singletonFactories):存放Bean的对象工厂(ObjectFactory),核心作用是支持Bean的AOP代理循环依赖,提前暴露代理对象的引用。
循环依赖执行流程:
当A、B两个Bean互相依赖时,A先完成实例化,将自身的ObjectFactory放入三级缓存;随后A开始填充属性,需要注入B,触发B的创建;B创建时需要注入A,此时从三级缓存获取A的对象工厂,通过工厂获取A的引用(普通Bean返回原始对象,代理Bean返回代理对象),完成B的初始化后,A继续完成剩余属性填充和初始化,最终将完整A放入一级缓存,删除二、三级缓存中的A数据。
为什么二级缓存无法解决循环依赖?
如
原创力文档

文档评论(0)