3-spring解决循环依赖
2024-05-15 20:36:08 8 举报
在Spring框架中,循环依赖问题是一个常见但复杂的问题。循环依赖是指两个或两个以上的bean相互依赖,形成了一个闭环。Spring通过使用三级缓存和提前暴露对象的方法解决了这个问题。 首先,Spring使用了一个名为singletonFactories的缓存,它包含了所有正在创建的单例bean的工厂。当Spring遇到一个循环依赖时,它会提前将bean暴露为一个工厂对象,并将其添加到singletonFactories缓存中。这样,其他依赖此bean的bean就可以获取到这个工厂对象并进行初始化。 其次,Spring使用了一个名为earlySingletonObjects的缓存,它包含了所有已经经历过实例化但尚未初始化的bean。当一个bean被创建时,如果它依赖其他bean,Spring会将这个bean添加到earlySingletonObjects缓存中。这样,其他依赖此bean的bean就可以获取到这个bean并进行初始化。 最后,Spring使用了一个名为singletonObjects的缓存,它包含了所有已经创建并初始化的bean。当一个bean被创建并初始化后,Spring会将这个bean添加到singletonObjects缓存中。这样,其他依赖此bean的bean就可以获取到这个bean并进行初始化。 通过使用这三个缓存,Spring确保了循环依赖的问题能够得到解决,使得应用程序能够在复杂的依赖关系中正常工作。
作者其他创作
大纲/内容
演示产生循环依赖
什么是循环依赖
并发情况下,其它线程获取不完整的bean会有空指针问题
存在的问题
方法加上synchronized关键字(锁粒度大)
借鉴 Double-Checked Locking 思想(减少锁粒度)
解决问题
添加一级缓存(singletonObjects)
存放创建时不完整的bean,降低锁粒度
目的
实现
添加二级缓存(earlySingletonObjects)
打破循环依赖
实现循环依赖中的AOP
三级缓存
spring解决循环依赖问题
0 条评论
回复 删除
下一页