欢迎来到本站
0

Spring 工程执行过程

2021.12.11 | 访客 | 973次围观


ApplicationContext 是一个 接口,是 BeanFactory 这个接口的子接口,它扩展了 BeanFactory 这个接口,提供了额外附加的功能。

而 BeanFactory 是管理 bean 对象的容器的根接口,大家了解下就好,我们是针对它的子接口 ClassPathXmlApplicationContext 做的实例化,目的是加载项目中的 Spring 的配置文件,使 Spring 来管理我们定义的 bean 对象。



容器初始化执行动作

applicationContext 实例化执行代码逻辑 。

我们追踪下源码,发现 ClassPathXmlApplicationContext 初始化的时候,它做了一系列的事情。源码如下:


代码解释:


是初始化 ClassPathXmlApplicationContext 对象执行的有参构造;

加载项目下的 xml 配置文件;

调用 refresh 刷新容器的方法 bean 的实例化就在这个方法中。



容器初始化 bean 对象动作

1 的位置:是准备刷新,那么 Spring 只是设置刷新的标记,加载了外部的 properties 属性文件;

2 的位置:是准备 bean 工厂对象;

3 的位置:这一步骤就加载了配置文件中的所有 bean 标签,但是并没有对他们进行实例化;

4 的位置:完成此上下文的 bean 工厂的初始化,初始化所有剩余的单例 bean。(Spring 中默认加载的 bean 就是单例模式后面生命周期会讲)

最后的位置:完成容器的刷新,也就是所有的 bean 初始化完成


容器中获取对象的过程

它其实就是一个 map 集合 ,这个 map 集合的 key 就是我们定义的 bean 的 id 或者 bean 的 name ,那么值就是对象的实例。


Spring 初始化 bean 和获取 bean 的流程小结:

Spring 框架通过 ResourceLoader 加载项目的 xml 配置文件;

读取 xml 的配置信息 变成对象存储,但未实例化;

通过 bean 工厂处理器对 bean 做实例化,存储到一个 map 集合中默认是单例;

获取对象 通过 xml 文件中 bean 的 id 从 map 集合中通过 get (key) 获取。

版权声明

本文仅代表作者观点,不代表xx立场。
本文系作者授权xxx发表,未经许可,不得转载。

发表评论