spring三级缓存,循环依赖
【摘要】 1.循环依赖循环依赖,简单来说就是 A的属性中有B,B中属性有A。 基于此前提下加单例的情况下,导致了循环依赖。普通多例的情况下不存在循环依赖。spring声明周期: 实例化- 属性复制- 初始化- 销毁创建A -> 需要B 创建B -> 需要A单例情况下,循环依赖成型。2.spring解决循环依赖-三级缓存spring使用的IOC依赖注入,默认情况下spring的bean都是单例的...
1.循环依赖
循环依赖,简单来说就是 A的属性中有B,B中属性有A。 基于此前提下加单例的情况下,导致了循环依赖。普通多例的情况下不存在循环依赖。
spring声明周期: 实例化- 属性复制- 初始化- 销毁
创建A -> 需要B
创建B -> 需要A
单例情况下,循环依赖成型。
2.spring解决循环依赖-三级缓存
spring使用的IOC依赖注入,默认情况下spring的bean都是单例的。spring提供的解决方案。
三级缓存,主要是讲spring开辟的三个空间,分别存放不同的bean以便于解决循环依赖。
一级缓存:完全创建初始化的bean,已经完成bean创建化
二级缓存:半完全初始化的bean,处于创建过程,缺少必要的属性
三级缓存:存放工厂对象,主要用户工厂对象的创建,保证单例
3.常见面试题
1.spring如何解决循环依赖的问题 :三级缓存,上面创建过程
2.必须要三级缓存吗,二级缓存是否可以。 :可以,三级缓存的目的主要是解决生成代理对象的问题,二级缓存同样也是可以生成代理对象的,只不过这样就需要在对象生成时,未初始化前要生成对应的代理对象,便于后续注入到相应的实体类。这样是完全可以的,只是spring设计要求规定,对象的生成与代理对象的生成应该是分开进行,所以引入了三级缓存来解决该问题。
3.三级缓存可以解决所有循环依赖问题吗 :不能,如果通过构造函数注入,则无法解决,需要手动处理
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)