BeanCurrentlyInCreationException解决当前容器创建异常、循环依赖问题
BeanCurrentlyInCreationException解决当前容器创建异常、循环依赖问题
一、什么是循环依赖呢?
类A依赖类B,类B也依赖类A,这种情况就会出现循环依赖。
Bean A → Bean B → Bean A
上面是比较容易发现的循环依赖,也有更深层次的循环依赖。
Bean A → Bean B → Bean C → Bean D → Bean E → Bean A
二、Spring 的循环依赖
当Spring上下文在加载所有的bean时,会尝试按照他们他们关联关系的顺序进行创建。如果不存在循环依赖时,例如:
Bean A → Bean B → Bean C
Spring会先创建Bean C,再创建Bean B(并将Bean C注入到Bean B中),最后再创建Bean A(并将Bean B注入到Bean A中)。
但是,如果我们存在循环依赖,Spring上下文不知道应该先创建哪个Bean,因为它们依赖于彼此。在这种情况下,Spring会在加载上下文时,抛出一个BeanCurrentlyInCreationException。
当我们使用构造方法进行注入时,会遇到这种情况。因为它是上下文加载就被要求注入。
三、结论
有很多方法可以处理循环依赖关系。首先要考虑的是重新设计你的bean,这样就不需要循环依赖关系:它们通常是可以改进的设计的症状。但是,如果您绝对需要在项目中具有循环依赖项,则可以按照此处建议的一些解决方法进行操作。
BeanCurrentlyInCreationException解决当前容器创建异常、循环依赖问题的更多相关文章
- Spring:解决因@Async引起的循环依赖报错
最近项目中使用@Async注解在方法上引起了循环依赖报错: org.springframework.beans.factory.BeanCurrentlyInCreationException: Er ...
- 巧用 Lazy 解决.NET Core中的循环依赖关系
原文作者: Thomas Levesque 原文链接:https://thomaslevesque.com/2020/03/18/lazily-resolving-services-to-fix-ci ...
- Spring IOC 容器源码分析 - 循环依赖的解决办法
1. 简介 本文,我们来看一下 Spring 是如何解决循环依赖问题的.在本篇文章中,我会首先向大家介绍一下什么是循环依赖.然后,进入源码分析阶段.为了更好的说明 Spring 解决循环依赖的办法,我 ...
- Spring 循环依赖的三种方式(三级缓存解决Set循环依赖问题)
本篇文章解决以下问题: [1] . Spring循环依赖指的是什么? [2] . Spring能解决哪种情况的循环依赖?不能解决哪种情况? [3] . Spring能解决的循环依赖原理(三级缓存) 一 ...
- Spring 是如何解决循环依赖的?
前言 相信很多小伙伴在工作中都会遇到循环依赖,不过大多数它是这样显示的: 还会提示这么一句: Requested bean is currently in creation: Is there an ...
- Spring里bean之间的循环依赖解决与源码解读
通过前几节的分析,已经成功将bean实例化,但是大家一定要将bean的实例化和完成bean的创建区分开,bean的实例化仅仅是获得了bean的实例,该bean仍在继续创建之中,之后在该bean实例的基 ...
- Spring解决bean之间的循环依赖
转自链接:https://blog.csdn.net/lyc_liyanchao/article/details/83099675通过前几节的分析,已经成功将bean实例化,但是大家一定要将bean的 ...
- 曹工说Spring Boot源码(29)-- Spring 解决循环依赖为什么使用三级缓存,而不是二级缓存
写在前面的话 相关背景及资源: 曹工说Spring Boot源码(1)-- Bean Definition到底是什么,附spring思维导图分享 曹工说Spring Boot源码(2)-- Bean ...
- 深谈Spring如何解决Bean的循环依赖
1. 什么是循环依赖 Java循环依赖指的是两个或多个类之间的相互依赖,形成了一个循环的依赖关系,这会导致程序编译失败或运行时出现异常.下面小岳就带大家来详细分析下Java循环依赖. 简单来讲就是:假 ...
- 从源码解读Spring如何解决bean循环依赖
1 什么是bean的循环依赖 循环依赖的原文是circular reference,指多个对象相互引用,形成一个闭环. 以两个对象的循环依赖为例: Spring中的循环依赖有 3 种情况: 构造器(c ...
随机推荐
- Java实践项目 - 购物车模块
Smiling & Weeping ----世界上美好的东西不太多,立秋傍晚从河对岸吹来的风, 加入购物车 1.数据创建--创建t_cart CREATE TABLE t_cart( cid ...
- 第3章 Git最最常用命令大全
相信来查命令的同学,根本不是来学具体某个命令的作用的,只是想来查看命令的语法,博主深知这一点(因为博主也是这样过来的),相信这篇文章,将会带给你在工作中最常用的命令,让你一打开就是命令大全!! 喜欢这 ...
- 5分钟入门 next13
上半年vercel 推出了nextjs13 这个大版本,刚好最近有个c端的项目,所以就用了这个框架来写,技术体系基本也是文档提到的 tailwindcss + ts + swr + ssr ,总的来开 ...
- c语言代码练习3
//查看数字是否存在于数组中#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> int main() { int i = 0; int ...
- Android应用中对于微信分享的实例及问题
源码地址 如何分享 分享无相应 分享结果如何接收响应 微信 分享回调 (提示几点关键问题: debug_key 一定要获得对应的签名码 然后和weixin官网的appid对应 ) 几点注意 ...
- 重温dp——最长上升公共子序列
一道经典的dp了 题目描述 给出 1,2,-,n 的两个排列 P1 和 P2 ,求它们的最长公共子序列. 输入格式 第一行是一个数 n. 接下来两行,每行为 n 个数,为自然数 1,2,-,n 的一 ...
- 01-spfile和pfile的区别,生成,加载和修复
oracle数据库的配置文件指的是系统在启动到"nomount"阶段需要加载的文件,也叫做pfile或者spfile,但是其实pfile和spfile是不同的文件. 不同的数据库配 ...
- Redis中的缓存雪崩、缓存击穿、缓存穿透问题
1. 什么是缓存雪崩 当我们提到缓存系统中的问题,缓存雪崩是一个经常被讨论的话题.缓存雪崩是指在某一时刻发生大量的缓存失效,导致瞬间大量的请求直接打到了数据库,可能会导致数据库瞬间压力过大甚至宕机.尤 ...
- liunx远程管理常用命令笔记
1,关机/重启 shutdown -r now : 立刻重启的命令 2,查看或配置网卡信息 2.1 网卡和 IP 地址 2.2 ifconfig 用了管道和grep 查找到 IP 地址 2.3 p ...
- HashMap源码详解
HashMap简介 HashMap是Java语言中的一种集合类,它实现了Map接口,用于存储Key-Value对.它基于哈希表数据结构,通过计算Key的哈希值来快速定位Value的位置,从而实现高效的 ...