spring三级缓存解决循环依赖
创建单例bean主要经过三个步骤:1.实例化,2.填充属性,3:初始化
一级缓存:singletonObjects,存放经过初始化后的bean。当通过名字获取bean的时候,如果这个名字对应的bean在一级缓存中,就直接从一级缓存中获取返回,这样就不会多次创建bean了。
二级缓存:earlySingletonObjects,存放根据原始对象进行AOP之后的代理对象。
三级缓存:singletonFactories,存放bean对应的工厂对象,在bean实例化之后就把生成最终对象的ObjectFactory对象放到三级缓存中,当从二级缓存获取不到对象的时候,就根据这个ObjectFactory生成最终对象。
注:只有单例bean会通过三级缓存提前暴露来解决循环依赖,而非单例的bean,每次从容器中获取都是一个新的对象,都会重新创建,所以非单例的bean是没有缓存的,不会将其放到三级缓存中。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix