写点什么

2020 大厂面试一道高频 Spring 题,90% 的 Java 开发者都拜倒在它脚下!

发布于: 2020 年 09 月 22 日

最近很多水友在后台留言问:


Spring 到底是怎么循环依赖问题的,这也是最近两年新出的面试频度较高的面试题!


下面我们就通过这篇文章让大家了解循环依赖的问题。


什么是循环依赖?


循环依赖其实是指两个及以上 bean 相互持有对方,最终形成闭环的过程(一般聊循环依赖都是默认的单例 bean),简单说就是 A 依赖 B,B 依赖 C,C 又依赖 A。



其实在 Spring 中,有两种循环依赖的场景…


  • 第一种:构造器的循环依赖

  • 第二种:setter 的依赖注入


第一种是没有办法解决的,而第二种可以使用提前暴露对象的方式进行解决


那么肯定有很多小伙伴会有疑问,为什么?


其实想搞明白这个问题,需要对 Spring 的 Bean 的生命周期有一个完整的了解,如下图:


大家可能对这个图不太熟悉,但是我要强调的是,图中我已经用三种颜色标识了,除了使用这部分之外,可以分为实例化和初始化,这也是解决问题的核心。


同时,Spring 中还使用了三级缓存来解决问题:


面对大厂问 Spring 源码而言,很多的 Java 面试者都纷纷败北,源码没有一个正确的方法学起来确实挺吃力的,在这把之前学源码的一些经验和笔记分享给大家,希望对那些还在学习 Spring 源码的朋友有所帮助!


Spring 源码复习笔记


由于文案内容过长,只把 Spring 源码笔记文档内部部分截图出来,对学习 Spring 源码感兴趣的小伙伴点赞此文后添加助手 vx:bjmsb10 即可获取免费领取方式!



第一部分 Spring 概述


  • 第 1 节 Spring 简介

  • 第 2 节 Spring 发展历程

  • 第 3 节 Spring 的优势

  • 第 4 节 Spring 的核心结构

  • 第 5 节 Spring 框架版本



第二部分:AOP 与 IOC 核心思想


  • 什么是 loC?

  • loC 解决了什么问题

  • loC 和 DI 的区别

  • 什么是 AOP

  • AOP 在解决什么问题

  • 为什么叫做面向切面编程


第三部分 手写实现 IoC 和 AOP



第四部分 Spring IOC 应用


  • BeanFactory 与 ApplicationContext 区别

  • 纯 xml 模式

  • xml 与注解相结合模式

  • 纯注解模式

  • lazy-Init 延迟加载

  • FactoryBean 和 BeanF actory

  • 后置处理器

  • BeanPostProcessor

  • BeanFactoryPostProcessor


第五部分 Spring IOC 源码深度剖析


  • Spring loC 容器初始化主体流程

  • BeanFactory 创建流程

  • Bean 创建流程

  • lazy-init 延迟加载机制原理

  • Spring loC 循环依赖问题


第六部分 Spring AOP 应用


  • 第 1 节 AOP 相关术语

  • 第 2 节 Spring 中 AOP 的代理选择

  • 第 3 节 Spring 中 AOP 的配置方式

  • 第 4 节 Spring 中 AOP 实现

  • 第 5 节 Spring 声明式事务的支持


第七部分 Spring AOP 源码深度剖析


  • 代理对象创建

  • AOP 基础用例准备

  • 时机点分析

  • 代理对象创建流程

  • @EnableTransaction Management

  • 加载事务控制组件

总结


最后要说的是,要想不被淘汰,我们必须学习源码。 现在程序员越来越多,可以说竞争尤其激烈。如果我们想不被淘汰,则我们时刻要保持竞争力,那么必然要时刻学习,终生学习,生而有涯而学无涯。因为 CRUD 大家都会,要提高自己的技术能力,此时学习开源项目的源码就尤为关键了。如果我们不想成为 CRUD 工程师,还有更高的技术追求,那么我们就要有更高的要求。当然,学习开源项目源码的目的是借鉴大牛们的优秀作品,最终要学以致用。另外,个人观点:学习源码是提高自己编码能力的最好方式。


如果我们走的是技术路线而非管理路线,若还有更高的技术追求,那么学习源码是我们绕不过去的坎。 真的,学习源码实在是太重要了。只要我们还有更高的技术追求,或许你想成为技术大牛,但是学习源码是成为大牛的必经之路。不是每个人都能成为大牛,但不学源码就肯定成为不了大牛,因为学习源码是提高自己的最好方式,不论何时,学习源码都不会晚,共勉!


下面是本人学习源码入门时看的 Spring 源码 100 集,点赞此文后添加助手 vx:bjmsb10 免费获取


用户头像

还未添加个人签名 2020.09.07 加入

还未添加个人简介

评论

发布
暂无评论
2020大厂面试一道高频Spring题,90%的Java开发者都拜倒在它脚下!