【笔记】Spring的循环依赖

发布时间:2023年12月22日

Spring的循环依赖

在这里插入图片描述

在这里插入图片描述
ObjectFactory:函数式接口,可以将lambda表达式作为参数放在方法的实参种,在方法执行的时候,并不会实际的调用当前lambda表达式,只有在调用getObject方法的时候才回去调用lambda表达式
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

为什么spring要用三级缓存来解决循环依赖?

如果我们能保证所有的bean对象都不会被aop代理,那么二级缓存就能解决循环依赖问题,但是在spring中很多的bean都需要被代理。

spring的设计原则是在bean初始化完成才会创建代理对象,如果按照设计,那么就会出现一个问题:注入的对象和最终暴露的对象不是同一个对象,违背了单例的原则,所以需要将代理操作提前

使用二级缓存,可以满足解决循环依赖的问题,那么就意味着所有bean的创建代理的操作都要提前到实例化后初始化之前去创建代理对象,再将代理对象放入到二级缓存中,这次的操作是与设计相悖的;

那么何不在需要的时候再去创建代理对象呢,不需要的时候仍然在初始化后再创建代理对象呢,所以这个时候就引入了三级缓存,在三级缓存中放入ObjectFactory<?>,等需要的时候再去调用ObejctFactory.getObeject方法,该方法只会执行一次,就直接删除三级缓存保证了单例需求

默写
在这里插入图片描述

文章来源:https://blog.csdn.net/weixin_43914278/article/details/135147446
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。