| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> Java知识库 -> Spring如何解决循环依赖 -> 正文阅读 |
|
|
[Java知识库]Spring如何解决循环依赖 |
|
循环依赖:指多个bean之间相互依赖从而形成一个闭环。 即A依赖B,B依赖C,C依赖A这种。
?Spring中出现循环依赖的情况: 构造器注入:无法解决 多列setter注入:无法解决 单列setter注入:可通过三成缓存解决 Spring通过三层缓存解决依赖 三层缓存: singletonObject:一级缓存,存放完成初始化的对象,可以直接使用
初始化步骤:
过程简单介绍一下: 在有循环依赖的的时候,a对象初始化的流程中,将b对象也实例化和初始化了,在b的初始化过程中,将a从三级缓存移到了二级缓存中,当b初始化完成后继续向下执行,会执行到addSingleton()
在b的所用工作做完之后,返回到a初始化属性b的代码,调用doCreateBean方法继续执行,最终也会到addSingleton()方法,将a也加入一级缓存,并且从二级缓存中删除a。这样a和b两个循环依赖的bean都被放入到一级缓存中。 系统启动获取配置文件后,程序是依次读取并加载的,所以当执行配置文件时,先获取a对象,如果获取不到则实例化a对象,然后初始化a对象即给a添加b属性,在添加b属性的时候先获取b,如果b存在则直接给a设置,不存在则实例化b,并且初始化b对象即给b添加对应的属性。
|
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/7 16:15:51- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |