• 阿里问的这个面试题,真的有这么难吗?


    最近很多水友在后台留言问:
    Spring 的循环依赖问题,这也是最近两年新出的面试频度较高的面试题!

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

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

    其实在 Spring 中,有两种循环依赖的场景…
    第一种:构造器的循环依赖
    第二种:setter 的依赖注入

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

    那么肯定有很多小伙伴会有疑问,为什么?
    其实想搞明白这个问题,需要对 Spring 的 Bean 的生命周期有一个完整的了解,如下图:

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

    上图就是 Spring 中的三级缓存,那么问题来了
    Spring 是如何通过三级缓存来解决问题的?
    一级缓存能不能解决?为什么?
    二级缓存能不能解决?为什么?
    为什么非要使用三级缓存?使用三级缓存是为了解决什么问题?
    【这里想说,因为自己也走了很多弯路过来的,所以才下定决心整理,收集过程虽不易,但想到能帮助到一部分自学java 的人,心里也是甜的!有需要的伙伴请点㊦方】↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

  • 相关阅读:
    【Linux】基础IO —— 下(实现动静态库)
    LeCun指明下一代AI方向:自主机器智能
    Redis学习笔记( 入门篇)
    软考网络工程师每日一练10.20
    图解SOC中的Timer(一):系统里有哪些Timer?
    网关Gateway-快速上手
    MFC Windows 程序设计[130]之页面常用控件组
    数据开发对部分报表的同步时效提出了很高的要求
    k8s--基础--23.6--认证-授权-准入控制--通过kubeconfig登陆dashboard
    linux-动态库和静态库制作和使用
  • 原文地址:https://blog.csdn.net/m0_54850604/article/details/127389939