Spring-循环依赖(circular dependencies)
什么是循环依赖?
抛出的异常是:beanCurrentlyInCreationException
单例bean中,属性互相引用的场景;
两中注入方式对循环依赖的影响?
构造方法注入,可能会造成循环依赖的问题;建议用setter方法注入;
即AB循环依赖问题只要A的注入方式是setter且singleton,就不会有循环依赖问题;
注意:默认的单例(singleton)场景是支持循环依赖的,不报错;
原型(prototype)场景是不支持循环依赖的,会报错;
重要结论:
DefaultSingletonBeanRegistry
一级缓存:也叫单例池;存放已经经历了完整生命周期的bean对象(即已经初始化好了的bean);
二级缓存:存放早期暴露出来的Bean对象,Bean的生命周期未结束(属性还没填充完);(即实例化了,但未初始化的bean)
三级缓存:存放可以生成bean的工厂;(存放的是FactoryBean。假如A类实现了FactoryBean,那么依赖注入的时候不是A类,而是A类产生的bean)
只有单例的Bean会通过三级缓存提前暴露来解决循环依赖问题,而非单例的bean,每次从容器中获取都是一个新的对象,都会重新创建,所以非单例的Bean是没有缓存的,不会将其放到三级缓存中。
调用的流程图:
Spring-循环依赖(circular dependencies)相关推荐
- Spring 循环依赖(circular dependency)
一.什么是循环依赖 循环依赖即循环引用,形成闭环.比如,A 依赖 B,B 又依赖 A,形成了循环依赖:或者 A 依赖 B,B 依赖 C,C 又依赖 A,形成了循环依赖:更或者是自己依赖自己.如图: 这 ...
- 这个Spring循环依赖的坑,90%以上的人都不知道
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:Mythsman 原文:https://blog.myths ...
- 这个 Spring 循环依赖的坑,90% 以上的人都不知道
点击上方"后端技术精选",选择"置顶公众号" 技术文章第一时间送达! 作者:Mythsman blog.mythsman.com/post/5d838c7c2d ...
- Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)
总览 问题 详解 String.intern()的作用 link LeetCode的Two Sum题 link 什么是可重入锁? link 谈谈LockSupport link 谈谈AQS link ...
- Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3
Java开发常见面试题详解(LockSupport,AQS,Spring循环依赖,Redis)_3 总览 问题 详解 String.intern()的作用 link LeetCode的Two Sum题 ...
- 烂了大街的 Spring 循环依赖问题,你以为自己就真会了吗
前言 循环依赖问题,算是一道烂大街的面试题了,解毒之前,我们先来回顾两个知识点: 初学 Spring 的时候,我们就知道 IOC,控制反转么,它将原本在程序中手动创建对象的控制权,交由 Spring ...
- 【spring容器启动】之bean的实例化和初始化(文末附:spring循环依赖原理)
本次我们通过源码介绍ApplicationContext容器初始化流程,主要介绍容器内bean的实例化和初始化过程.ApplicationContext是Spring推出的先进Ioc容器,它继承了旧版 ...
- Spring循环依赖的三种方式以及解决办法
Spring循环依赖的三种方式以及解决办法 [转]https://www.cnblogs.com/liuqing576598117/p/11227007.html 示例 https://github. ...
- spring循环依赖解决办法
Spring循环依赖的解决办法!包含代码讲解!!! 大家面试相信遇到过这么一个问题. 面试官问:你知道spring的循环依赖吗,可以讲一下吗? 我:这个我熟啊,循环依赖就是spring构造一个bean ...
- 聊透Spring循环依赖
本文聊一下和依赖注入密切相关,并且在实际开发中很常见,面试也很喜欢问的一个问题:Spring是怎么解决循环依赖的? 之前就被问过Spring是怎么解决循环依赖的问题,当时年少无知,对Spring源码 ...
最新文章
- mysql rpc_使用XML-RPC和MySQL处理中文字符
- springboot中java泛型使用
- 基于 Knative 低成本部署在线应用,灵活自动伸缩
- codeigniter文件上传问题
- 2016.NET Core相关内容回顾
- AC日记——Count on a tree bzoj 2588
- mysql 处理数据_MySQL数据库,如何处理重复的数据?
- 【脑筋急转弯】—— 在网格中移动
- 纯个人整理!分享珍藏很久的《手把手AI项目》合集手册(附链接)
- 通过tf的tensorboard可视化训练进度
- Colab与谷歌云盘结合使用
- 营业执照在线生成_平罗县实现个体户营业执照“秒批”
- php连接sql server
- Hadoop基础【HDFS的shell,客户端操作、上传下载流程】
- 小程序嵌套的h5页面的转发功能
- 敏锐嗅出商机,她瞄准花卉市场的空白,将花店开出名气
- 三菱FX5U系列PLC内置模拟量使用方法和输入输出信号接线
- win10计算机中删除桌面,win10系统电脑桌面壁纸历史记录怎么删除
- 8、灰度图的腐蚀、膨胀、开闭运算、顶帽底帽
- 【Python】《Python语言程序设计》(嵩天 、黄天羽 、礼欣)测验单项选择题答案与解析合辑