网上大部分说的什么第三级关于aop都是不对的,其本质原因是如果只有两级,那么每次调用lambda表达式都是创建一个新的对象,因为在一个完整的依赖流程没有结束前,每次调用都是返回一个新的bean。首先明确一点一个完整的bean是需要实例化+初始化都完成了才会被放入一级缓存,那么比如a依赖b和c,b依赖a,c依赖a,那么执行流程是实例化a,发现需要b,实例化b,发现需要a,去一级缓存找到a没找到,去二级缓存找a没找到,去三级缓存创建a,半成品a被保存到二级缓存(由于a还有c需要创建,所以a暂时只会留在二级缓存,不会去一级缓存),b里面a使用的就是半成品对象,b被放入一级缓存,(现在b的流程结束了,返回对象a),发现a还是需要c,实例化c,发现c也需要a,去一级缓存里找没找到a,去二级缓存里面找,找到半成品a了,直接拿来用。看到了关键了吗?如果没有二级缓存,那在这里,c同样会去调用lambda表达式弄一个新的a出来,这也破坏了单例了,彻底错了