如果弄不清楚为什么要使用三级缓存(singletonFactories)来处理需要代理(AOP)的类,可以去看图解Spring-生命周期 ,从Bean的生命周期可以知道是在BeanPostProcessor的后置处理中生成的代理对象,因此在循环依赖时,需要提前暴露代理对象(结合上图第2步和第10步理解)。