阅界资讯

10.Java Spring框架源码分析

阅阅界编辑部2阅读2分钟

读 Spring 源码最怕迷路:方法套方法,回调套回调。这篇是位博主啃完实例化流程后画的路线图,从容器启动到 Bean 就绪,关键方法一个不落,照着它读源码,心里有张地图。

先记住总路线。容器启动后,核心就一件事:把所有非懒加载的单实例 Bean 建出来。入口是 finishBeanFactoryInitialization,关键动作是 preInstantiateSingletons。后面所有步骤,都是为这件事服务的。

第一步,逐个创建。先拿到所有 Bean 的名字,一个个建。先看之前有没有建过,注意这里看的不是缓存,而是之前步骤的产物;没有再去缓存里找,还没有才真正创建。顺序是:先看看能不能直接返回代理对象,不能再走创建。

第二步,代理的学问。第一次拿业务 Bean 时,容器里既没有业务 Bean 也没有代理 Bean,只能先创建业务 Bean,再执行后置处理生成代理。第二次来拿时,代理已经在了,直接返回。举个具体例子:业务 Bean 叫 Calc,代理叫 CalcProxy。第一次两手空空,只能现建现代理;第二次有代理在,直接交货。想拿代理,靠的是调实例化前后的两组后置处理,命中了就返回,没命中才继续往下走。

第三步,真正创建实例。调 doCreateBean,分四步:建实例、给属性赋值、初始化、注册销毁方法。属性赋值有三板斧:先过实例化后置处理,再处理属性值,最后调 setter。初始化也有三件套:先执行所有后置处理的前置方法,再调自定义的初始化方法,最后执行后置处理的后置方法,代理 Bean 就是在这最后一步里诞生的。

照这个顺序读源码:先看名字怎么一个个建,再看代理什么时候插队,最后看实例化四步。每个方法只干一件事,顺着这条线走,Spring 就不再是一团浆糊。

来源|博客园《10.Java Spring框架源码分析》,https://www.cnblogs.com/ThinkerQAQ/p/18966188

程序员技术场技术后端

评论(0)

暂无评论,来抢第一条。