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

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

内容提要

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

🎯

关键要点

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

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

  • 三级缓存包括:一级缓存存储完整Bean,二级缓存存储半成品Bean,三级缓存存储FactoryBean。

  • 三级缓存的处理流程是:实例化Bean后将其存入缓存,避免重复创建。

  • 一级缓存无法处理循环依赖,因为依赖注入发生在初始化之前。

  • 二级缓存可以处理普通Bean的循环依赖,但对代理Bean处理复杂。

  • Spring AOP的代理Bean在初始化后创建,导致循环依赖问题。

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

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

➡️

继续阅读