美文网首页
Spring源码私家笔记——Spring启动流程概述

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

作者: 请给我一根烟的时间 | 来源:发表于2022-05-03 18:48 被阅读0次

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

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


    d7db65b7943648e49ba1425aeccce451.png f7947d8902134298a333bb8ff4d404ce.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

    也可以关注笔者:请给我一根烟的时间(https://blog.csdn.net/mytream),查看更多个人心得和分享

    相关文章

      网友评论

          本文标题:Spring源码私家笔记——Spring启动流程概述

          本文链接:https://www.haomeiwen.com/subject/mmliyrtx.html