面试官:详细介绍一下Spring的循环依赖
💡
原文中文,约5800字,阅读约需14分钟。
📝
内容提要
Spring的循环依赖问题可以通过三级缓存来处理,避免循环依赖。一级和二级缓存无法处理循环依赖,三级缓存可以处理普通Bean的循环依赖,但对于代理Bean的循环依赖仍然存在问题。构造器注入的类无法处理循环依赖,但可以通过@Lazy注解推迟加载解决。
🎯
关键要点
-
Spring循环依赖是指两个Bean相互依赖,导致死循环。
-
Spring通过三级缓存处理循环依赖,一级和二级缓存无法解决此问题。
-
三级缓存包括:一级缓存存储完整Bean,二级缓存存储半成品Bean,三级缓存存储FactoryBean。
-
三级缓存的处理流程是:实例化Bean后将其存入缓存,避免重复创建。
-
一级缓存无法处理循环依赖,因为依赖注入发生在初始化之前。
-
二级缓存可以处理普通Bean的循环依赖,但对代理Bean处理复杂。
-
Spring AOP的代理Bean在初始化后创建,导致循环依赖问题。
-
三级缓存只支持单例Bean,原型Bean无法处理循环依赖。
-
构造器注入的类无法处理循环依赖,但可以通过@Lazy注解推迟加载解决。
➡️