面试官:详细介绍一下Spring的循环依赖
原文中文,约5800字,阅读约需14分钟。
📝
内容提要
Spring的循环依赖问题可以通过三级缓存来处理,避免循环依赖。一级和二级缓存无法处理循环依赖,三级缓存可以处理普通Bean的循环依赖,但对于代理Bean的循环依赖仍然存在问题。构造器注入的类无法处理循环依赖,但可以通过@Lazy注解推迟加载解决。
❓
Q&A
什么是Spring的循环依赖?
Spring的循环依赖是指两个Bean相互依赖,导致死循环的现象。
Spring如何处理循环依赖?
Spring通过三级缓存来处理循环依赖,一级和二级缓存无法解决此问题。
三级缓存的组成部分是什么?
三级缓存包括一级缓存(存储完整Bean)、二级缓存(存储半成品Bean)和三级缓存(存储FactoryBean)。
为什么一级和二级缓存无法处理循环依赖?
一级缓存无法处理循环依赖因为依赖注入发生在初始化之前,二级缓存对代理Bean处理复杂。
构造器注入的类如何解决循环依赖问题?
构造器注入的类无法处理循环依赖,但可以通过@Lazy注解推迟加载来解决。
三级缓存只支持单例Bean吗?
是的,三级缓存只支持单例Bean,原型Bean无法处理循环依赖。
🏷️