spring 怎么解决循环依赖的

spring 怎么解决循环依赖的

理解spring的生命周期

分为容器启动阶段、bean的实例化阶段、bean的属性注入阶段、bean的初始化阶段、bean的缓存阶段、bean的销毁阶段

怎么解决循环依赖

假设有两个对象 X和Y,X依赖了Y,Y依赖了X,spring能解决循环依赖,底层主要接住了3个map。
第一个是singletonObjects:缓存实例化好的bean
第二个是earlySingletonObjects:缓存半成品对象,多级循环依赖的社会化,不重复创建对象,提高效率
第三个是singletonFactories:缓存ObjectFactory对象
当在创建X对象的时候,会将lambda对象ObjectFactory放到singletonFactories中
后续进行属性注入的时候,发现需要注入Y,就需要去创建Y,当创建Y的时候,也会将对应的lambda对象ObjectFactory放到singletonFactories中
Y的生命周期继续往下走,然后填充属性的时候,发现需要填充X,就会从三级缓存去获取到ObjectFactory lambda表达式
执行表达式获取到半成品对象,在这个阶段,可以做很多扩展,比如AOP,提前完成代理
存到二级缓存earlySingletonObjects中
将X从三级缓存singletonFactories中移除
然后Y属性注入完成后,Y就创建完成了,
继续进行X属性填充,填充完后,X也创建完成

posted @ 2023-12-13 15:22  尐海爸爸  阅读(5)  评论(0编辑  收藏  举报