作者简介:王哥,CSDN2022博客总榜Top100、博客专家
技术交流:定期更新Java硬核干货,不定期送书活动
王哥多年工作总结:Java学习路线总结, 点击 突击面试
数十万人的面试选择: 面试说人话系列《面试1v1》
我是 javapub,一名 Markdown
程序员从,八股文种子选手。
我是 javapub,一名 Markdown
程序员从,八股文种子选手。
面试官: 小伙子,听说你对 Spring 循环依赖比较熟悉,是真的吗?
候选人: 王哥,不敢说很熟悉,但有一定了解,请王哥考考我。
面试官: 那好,首先简单说一下,什么是 Spring 循环依赖?
候选人: Spring 循环依赖指的是 BeanA 依赖 BeanB,而 BeanB 也直接或间接依赖 BeanA,两者之间形成依赖循环。这会导致 Bean 无法正常实例化。
面试官: circular dependencies,确实是这样。Spring Bean 的循环依赖有哪些场景?
候选人: 主要有三种场景:
面试官: 那 Spring 是如何解决循环依赖问题的呢?
候选人: Spring 采用提前暴露对象的方式解决循环依赖,主要通过 AOP 功能和 SmartInstantiationAwareBeanPostProcessor#postProcessAfterInstantiation 方法实现。
//AbstractAutowireCapableBeanFactory#doCreateBean
...
// Give BeanPostProcessors a chance to return a proxy instead of the target bean instance.
Object bean = resolveBeforeInstantiation(beanName, mbd);
if (bean != null) {
return bean;
}
...
// Allow post-processors to modify the merged bean definition.
bean = applyBeanPostProcessorsAfterInstantiation(bean, beanName);
...
面试官: 那么,Spring 循环依赖会带来什么问题?
候选人: Spring 循环依赖主要会带来以下问题:
面试官: 那么,如何避免 Spring 循环依赖呢?
候选人: 主要有以下几种方式可以避免 Spring 循环依赖:
面试官: 不错,总结得很全面。看来你对 Spring 循环依赖还是比较清晰的,加油!
候选人: 谢谢 王哥 的提问,让我对 Spring 循环依赖有了更深入的认识。我会继续努力学习的!
最近我在更新《面试1v1》系列文章,主要以场景化的方式,讲解我们在面试中遇到的问题,致力于让每一位工程师拿到自己心仪的offer,感兴趣可以关注 JavaPub 追更!
目录合集:
Gitee:https://gitee.com/rodert/JavaPub
GitHub:https://github.com/Rodert/JavaPub
http://javapub.net.cn