在上面的方法中的核心是getBean方法,Test1 创建后填充属性时依赖Test2,那么就去创建 Test2,在创建 Test2 开始填充时发现依赖于 Test1,但此时 Test1 这个半成品对象已经存放在缓存到 singletonObjects 中了,所以Test2可以正常创建,在通过递归把 Test1 也创建完整了。
看到网上很多回答只是说跟aop有关,但是都有些模糊。我的理解: 1、aop应该在对象实例化完成(new对象、属性填充、初始化方法)后,再对还对象进行代理2、使用3级缓存,只要不发生循环依赖那就都能满足上面这条要求。