Spring如何解决循环依赖问题?

devtools/2024/9/23 5:42:23/

当然是用三级缓存来解决循环依赖问题。

那二级缓存能解决吗?

首先我们要知道Spring bean的生命周期

1.实例化(new)

2.属性赋值(populate)

3.初始化 一堆钩子函数(动态代理的生成也在这一步)

先来看二级缓存

在A实例化完成后,开始属性赋值的时候,去缓存中找B,发现B没有完成初始化,就开始B的实例化,之后发现A并没有初始化完成,所以B要去拿到提前暴露的A的对象,之后B就可以顺利进行初始化,初始化完成后将B放入一级缓存,之后A就可以去以及缓存中拿B,A就可以顺利执行完,执行完后,A也将放入一级缓存中。

那既然二级缓存能解决,为什么要用到三级缓存呢?

如果A不是简单的A,它如果要用到动态代理怎么办?

先搞清楚一个点,一级缓存中存的是A还是A的代理对象?

A引用B,B也引用A,如果A有代理对象的话,那A的代理对象也会引用A,那一级缓存放的是A还是A的代理对象呢?

当然是A的代理对象,如果放的是A,别人从容器里拿出A,调用它的方法,那注解就不生效了。(代理模式只做增强,不做修改 在执行A的前后增加某些操作)

那既然一级缓存存储的是A的代理对象,那B要是从二级缓存中拿到了A的暴露单例Bean(这个时候,这里面还是A的原始对象,非代理对象),但是咱们要的是A的代理对象。那不是GG了嘛

既然二级缓存不行,下面我们来介绍一下三级缓存如何解决循环依赖问题。

首先A实例化完后,放入第三级缓存中,然后去创建B,B去一级缓存中去拿 ,一级缓存没有,去二级缓存拿,也没有如果去三级缓存中拿,那肯定不行,B要的是代理对象,所以要有个地方去存A的代理对象,代理对象放在第二级缓存中。


http://www.ppmy.cn/devtools/36823.html

相关文章

Android OTA 交流群 2024 年 4 月问题汇总

Android OTA 交流群 2024 年 4 月问题汇总 相关文章 Android OTA 问题交流微信群和知识星球Android OTA 交流群 2024 年 4 月问题汇总Android OTA 交流群 2024 年 3 月问题汇总Android OTA 交流群 2024 年 2 月问题汇总Android OTA 交流群 2024 年 1 月问题汇总 问题汇总 2…

Python中如何调用其他文件的类或函数

Python中如何调用其他文件的类或函数 在Python编程中,随着项目的扩大,代码通常会被分解为多个模块,以提高可读性和可维护性。模块通常是包含Python定义和声明的文件。了解如何从一个文件调用另一个文件中的类或函数是非常重要的,…

Sarcasm detection论文解析 |用于微博讽刺检测的上下文增强卷积神经网络

论文地址 论文地址:Context-augmented convolutional neural networks for twitter sarcasm detection - ScienceDirect 论文首页 笔记大纲 用于微博讽刺检测的上下文增强卷积神经网络 📅出版年份:2018 📖出版期刊:Neurocomputing &#x1f…

影响外汇交易盈利的因素有哪些?

外汇交易就是通过汇率的差价来赚取相应的利润。在外汇交易中,投资者是否可以盈利,主要取决于是否正确的判断了市场趋势和行情。投资者在交易过程中受到主观和客观的因素影响,具体包含这些内容。 影响外汇交易盈利的因素有哪些? 1、…

go解析含passphrase的pem秘钥

背景 在编写TLS配置时需要用到需要用到一串包含passphrase的RSA秘钥,本想通过官方库的方式解析使用,但由于安全因素,官方已经禁用了DecryptPEMBlock、EncryptPEMBlock、IsEncryptedPEMBlock等函数,导致无法通过官方库去实现这个需…

Ansible自动化运维工具 - playbook 剧本编写

一. inventory 主机清单 Inventory 支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内。 1.1 inventory 中的变量含义 Inventory 变量名 含义ansible_hostansible连接节点时的IP地址ansible_port连接对方…

找不到模块“vue-router”。你的意思是要将 moduleResolution 选项设置为 node,还是要将别名添加到 paths 选项中?

在tsconfig.app.json中添加,记得一定是 tsconfig.app.json 中,如添加到 tsconfig.node.json 还是会报错的 哈哈哈哈,不瞒你们,我就添加错了,哈哈哈。所以这也算写一个demo提醒自己 "compilerOptions": {&qu…

如何自己设计一个类似 Dubbo 的 RPC 框架?

目录 一、面试官心理分析 二、面试题剖析 一、面试官心理分析 说实话,就这问题,其实就跟问你如何自己设计一个 MQ 是一样的道理,就考察两个: 你有没有对某个 rpc 框架原理有非常深入的理解。 你能不能从整体上…