相信很多java方向的码农都遇到过类似的经历,用了多年的sping全家桶,面试被问到spinrg bean生命周日很多人都回答不上来,最后被pass掉,可能之前都看过相关的文章最后都忘记了,在这里我教大家的是理解记忆的过程而不是死记硬背,分享一下鄙人的学习过程希望能够帮助大家。
涉及的两个包
spring bean包
spring webmvc包
如果想研究一个框架不知从哪下手,从日志下手绝对是最正确的选择,下面是目启动日志的几张关键截图
以上是项目启动的时spring几个关键步骤,这次重点研究bean工厂加载bean这个过程也就是
org.springframework.beans.factory.support.DefaultListableBeanFactory
为了更好的研究bean的生命周期这里在debug环境下查看spring类之间的调用关系如图:
debug调用过程
可以看出最终初始化bean是通过调用类
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean()
方法代码如下,加上了注释
其中初始化BeanAware方法invokeAwareMethods如图:
从上两张图中可以看出来bean的生命周期为:
1.BeanNameAware (让Bean获取自己在BeanFactory配置中的名字)
2.BeanClassloaderAware(让Bean获取配置的ClassLoader)
3.BeanFactoryAware(让Bean获取配置他们的BeanFactory的引用)
4.BeanPostProcessor(Bean初始化的前置和后置处理)
5.InitializingBean(初始化bean)
6.destroy(销毁bean以上代码没有体现如果bean实现接口DisposableBean则需实现该方法)
以上就是研究spring bean生命周期的一个过程,实际光靠看这篇文章记不住什么,还需要自己去实际操作一下,通过debug查看调用关系,读源码,才能游刃有余的去怼面试官。这次就分享这些,如果感兴趣的朋友可以关注一波,笔者会经常分享一些干货哦!