首先 明确一点解决的循环依赖问题只是单例bean的setter注入时产生的循环依赖 然后 先不要纠结三级缓存 二级缓存就可以解决普通循环依赖问题 其实就是在创建a的时候发现依赖b 把此时的半成品a放入二级缓存 此时去创建b 此时就可以从二级缓存拿到a 将b放入一级缓存 此时回到a创建 一级缓存有b 拿到注入 然后此时晋升到一级缓存 三级缓存存在的意义是为了解决对象存在代理的情况并且还要尽可能的满足单例bean的生命周期