三级缓存对应org.springframework.beans.factory.support.DefaultSingletonBeanRegistry类的三个属性:对于setter注入造成的依赖是通过Spring容器提前暴露刚完成实例化但未完成初始化的bean来完成的,而且只能解决单例作用域的bean循环依赖。使用上面的代码运行时会抛出如下异常:Spring容器会将每一个正在创建的Bean标识符放在一个“当前创建Bean池”中,Bean标识符在创建过程中将一直保持在这个池中,因此如果在创建Bean过程中发现自己已经在“当前创建Bean池”里时将抛出BeanCurrentlyInCreationException异常表示循环依赖;而对于创建完毕的Bean将从“当前创建Bean池”中清除掉。org.springframework.beans.factory.support.AbstractBeanFactory#doGetBeanorg.springframework.beans.factory.support.AbstractBeanFactory#beforePrototypeCreation其根本原因就是Spring容器不会对prototype类型的bean进行缓存,因此无法提前利用三级缓存暴露一个代理对象。
暂无评论