Spring源码私家笔记——Spring启动流程概述

在分析Spring源码之前,很容易陷入的一个误区就是,debugger一路点进去,然后迷失在茫茫的源码之中。

其实分析源码跟我们做系统开发一样,不会上来就开始撸代码,而是先做好系统的设计,然后才开始分工合作。正所谓“胸中有大纲,心中不慌张”,无论我们debugger到了何处,想想我们在地图的何处,就可以导航回去。

a315bf6c420780ab021e9206250db247.png

f72925920e1639b129c13f89c1ac793c.png

上图比较简略的标识了Spring容器的启动过程,所谓简略是指重点关注容器的变化过程的,比如:容器对象定义的加载、BeanFactory的后置处理,容器Bean的加载过程。而其他的过程比如属性资源的加载、监听器的处理等做了刻意的省略,在之后的Spring源码系列中,我们会用单独的章节进行介绍。
 

核心概念介绍

Bean:我们知道Spring容器管理着各种各样的对象,这些对象我们统称为Bean对象

BeanFactory:Spring并不直接对Bean对象进行实例化和初始化,这些过程都是通过BeanFactory来完成的。
 

ApplicationContext:Spring进程上下文,其实这里的上下文才更接近于我们通常理解的Spring容器,它处理管理着我们的个中Bean对象,还有Environment对象,各种监听器,BeanFactory的后置处理器,Bean的后置处理器等。
 

BeanDefinition:加载完spring的配置文件之后,并不是直接就生成各种Bean对象,而是将所有的定义信息封装在BeanDefinition列表中。
 

BeanFactoryPostProcessor:在创建好BeanFactory对象之后,Spring会执行一些列的后置处理器,这些后置处理器给扩展留出了空间,因为持有BeanFactory对象,但凡是它已有的信息都可以进行扩展或修改,比如BeanDefinition信息,Environment信息(属性资源)等
 

BeanPostProcessor:Bean的后置处理器,在Bean对象完成实例化和属性填充之后,我们有机会扩展后置处理器来对其进行修改

关键流程说明

配置信息读取在获取BeanFactory对象的过程中,会通过BeanDefinitionReader对象进行各种配置文件的解析和读取。

BeanFactory后置处理
在执行设计的Bean对象创建过程前,我们有机会扩展BeanFactoryPostProcessor来做一些个性化的工作,比如修改BeanDefinition信息,扩充Environment等

实例化Bean
实例化Bean的过程是BeanFactory使用beanDefinitions来反射构建出Bean对象

初始化Bean
初始化Bean的过程相对比较复杂,包括对Bean的属性填充,Aware方法的调用、后置处理器的执行,以及init-method方法的调用

结语

学习Spring的过程我们可以尝试着从战略上藐视它,从战术上重视它。在大的面上,我们对几个关键对象有个了解,对整体的加载流程有个了解,可以不求甚解,但要有自己的独立认知和总结,有误差和遗漏也没有太大关系,在之后的慢慢深入分析中不断的回头来补充完善。

为什么说从战术上要重视呢?有些同学找了一个Spring的架构图看了下,写了个DEMO就说:哦,我已经理解了。其实深入源码看下去,无不是源码作者的匠心巧思,其中的扩展性考虑、对设计模式的应用、对各个模块的封装和组织都值得我们细细的去品读。


————————————————
笔者原文发布在CSDN,欢迎点击查看:https://blog.csdn.net/mytream/article/details/124559529

也可以关注笔者:请给我一根烟的时间(请给我一根烟的时间的博客_CSDN博客-swing开发,感想,Web前端领域博主,查看更多个人心得和分享

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值