面试官:详细介绍一下Spring的循环依赖

💡 原文中文,约5800字,阅读约需14分钟。
📝

内容提要

Spring的循环依赖问题可以通过三级缓存来处理,避免循环依赖。一级和二级缓存无法处理循环依赖,三级缓存可以处理普通Bean的循环依赖,但对于代理Bean的循环依赖仍然存在问题。构造器注入的类无法处理循环依赖,但可以通过@Lazy注解推迟加载解决。

Q&A

什么是Spring的循环依赖?

Spring的循环依赖是指两个Bean相互依赖,导致死循环的现象。

Spring如何处理循环依赖?

Spring通过三级缓存来处理循环依赖,一级和二级缓存无法解决此问题。

三级缓存的组成部分是什么?

三级缓存包括一级缓存(存储完整Bean)、二级缓存(存储半成品Bean)和三级缓存(存储FactoryBean)。

为什么一级和二级缓存无法处理循环依赖?

一级缓存无法处理循环依赖因为依赖注入发生在初始化之前,二级缓存对代理Bean处理复杂。

构造器注入的类如何解决循环依赖问题?

构造器注入的类无法处理循环依赖,但可以通过@Lazy注解推迟加载来解决。

三级缓存只支持单例Bean吗?

是的,三级缓存只支持单例Bean,原型Bean无法处理循环依赖。

🏷️

标签

➡️

继续阅读