Spring详解(一):初始化流程

103 阅读1分钟

概述

Spring是一个轻量级的开发框架。Spring框架通过提供对控制反转IOC、面向切面编程AOP、MVC框架、事务等的支持,简化了Java后端项目开发。

Spring框架相关的技术中,最重要的是Spring框架的反转控制(IoC)容器。IoC也被称为依赖注入(DI)。它是一个过程,我们通过xml或者注解定义好类、依赖关系,然后容器初始化的过程中在创建 bean 、注入这些依赖关系。所以这个初始化流程就是核心。

ApplicationContext 接口代表Spring IoC容器,负责实例化、配置和组装bean。容器通过读取配置元数据来获得关于要实例化、配置和组装哪些对象的指示。配置元数据以XML、Java注解或Java代码表示。

image.png

应用程序类与配置元数据相结合,这样,在 ApplicationContext 被创建和初始化后,就有了一个完全配置好的可执行系统或应用程序。

初始化流程

refresh()方法

无论哪一种上下文类,都继承了AbstractApplicationContext类。容器启动的核心流程都是继承该类的refresh()方法。

image.png

下面是refresh()方法的一张时序图,画的很粗糙:

image.png

图中可能还有些错误,但是是debug了多遍源码后得到的。

bean生命周期

refresh()方法中很重要的一部分,也是经常会看到的一部分,bean生命周期的相关源码。

refresh()中finishBeanFactoryInitialization()体现了bean生命周期:

image.png

可以看到扩展点主要是BeanPostProcessor,它有多种实现类,然后主要是两个方法:postProcessBeforeInstantiation和postProcessBeforeInitialization。