java 判断有没有这个bean_阿里面试官:连Spring都玩不转,那就趁早放弃Java吧

前言

大家好,我是子路,一个靠Java吃饭的男人

前几天,有个某站的粉丝跟我讲,他去阿里面试的时候,被问到:如何理解Spring当中的循环依赖?

对于Spring中循环依赖这个问题,我有录制过详细的讲解视频,感兴趣的朋友可以去某站上看一下:子路玩Java

其实对于这个问题,又是被阿里这样的大厂面试官问出来,那么他肯定不是单纯的让你讲讲循环依赖的概念就可以了的,你在回答上要体现出你对于一个技术点的广度与深度的思维能力,才能让面试官更加认可你。

我这里就稍微表述一下吧,更详细的解析,大家可以去看看我关于这个问题拍的视频。

如何理解Spring当中的循环依赖?

问:如何理解Spring当中的循环依赖?

回答思路:首先在Spring Framework整个体系当中,我们的Bean是由一个BeanDefinition来构建的,就是BeanDefinition可以理解为我们Spring的一个建模,然后如果我们要理解循环依赖的话,那么首先我们要讲到我们的Springbean的生命周期(这个在我的前一篇文章中有讲到),看下图:

e1546399e0419a6e2c6f9e39d82f88f5.png

其中很重要的一个流程就是:

Spring在做完一系列验证之后,就回去从它开始要实例化Bean之前,会去容器当中,也就是Spring单例池当中获取一遍,看它存不存在就是有没有被创建,如果没有被创建,再去看一下它们有没有存在的二级缓存当中就是有没有被提前暴露。

如果都没有,那么我们的代码会接着往下执行——>创建X对象,创建完X对象之后,就会对这个X对象做一些初始化的工作:填充属性,在这个过程当中,它发觉X依赖Y,那么它就会走Y的生命周期流程。

和X一样,首先它会去Y做验证,然后判断Y有没有在单例池当中,如果没有在单例池当中的话,再判断Y有没有被提前暴露,这个时候Y是没有被提前暴露的,那Y也会接着往下执行,就会把Y给实例化好。接着再对Y做一些初始化工作,比如说把Y提前暴露,比如说把Y去做属性填充。

这个时候,当Y做属性填充,它发觉它要填充X,但是这时它又发觉X并没有被完整的实例化好,所以不能填充。它就不得不再去走一遍或者创建X的流程,那么又会走刚刚第一次X流程,在走X流程的过程中,它会发觉X已经被提前暴露了,所以它能够拿到一个已经提前暴露好的ObjectFactory所产生的一个X对象,那么这样子就完成了循环依赖

特别提到:循环依赖是支持单例的,以及非构造方法注入的。

这里文字表述应该是能看懂的,如果还觉得混乱的话,我建议大家去看一下我某站上讲解的视频。

99dca55d89f085ff7e430752bc6cc006.png

Spring的重要性

毫不夸张的说,Spring是每一位Java人都必须掌握的框架,换句话说,你只要是做Java开发的,就没有不会Spring的。

之前,有个学生跟我讲,去面试的时候被怼了,面试官问多了几个关于Spring源码的问题,自己没有答上来,除此之外,其它的问题都感觉回答得蛮好。但最后面试官跟他说:连Spring都玩不转,你还是别做Java了吧!

这个学生觉得很委屈,几个问题没回答上来而已,不要就不要,有必要说这句话嘛?

我安慰他说,Spring是任何一个Java程序员都必须要充分掌握的,面试官这样说确实欠妥,但不失为一种鞭策。很多刚入行的程序员都认为,会一些简单的业务代码,能上手一些项目,就足以在这一行混口饭吃。忽略技术源码、底层的人不在少数,而这些恰恰是你能在行业中立足的关键。

好了,多余的话就不说了,我希望大家既然选择了Java开发这条路,就应该认真对待,要爱上Java。

3fab160adfd8cc13535258415fa36a74.png
欢迎关注:子路玩Java
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值