Spring · 单选题 · 第 54 题
Java 后端开发面试 · 第 54 题
关于 Spring 的循环依赖,下列说法正确的是?
- A构造器注入形成的循环依赖,也能通过三级缓存提前暴露引用来自动解决
- Bprototype 作用域的 Bean 之间形成循环依赖时,容器会自动缓存并顺利解决
- C单例 Bean 用字段或 setter 注入形成的循环依赖,可以靠提前暴露早期引用来解决
- DSpring Boot 2.6 及以后的版本默认允许循环依赖,不需要做任何额外的配置
答案
C C. 单例 Bean 用字段或 setter 注入形成的循环依赖,可以靠提前暴露早期引用来解决
解析
Spring 在实例化单例后、属性填充前,把能生成早期引用的工厂放进三级缓存,另一个 Bean 注入时就能拿到这个半成品引用。构造器注入在实例化阶段就需要依赖,这时还没有任何引用可以暴露,所以解决不了。Spring Boot 2.6 起默认禁止循环依赖,需要 spring.main.allow-circular-references=true 才会放开,更好的做法是调整设计。