持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情
上一篇及之前的文章主要是介绍Spring IOC 容器如何使用,同时了解一些IOC 提供的功能。但是很多读者一定会有疑问,Spring 容器的内部是如何实现了这些功能的呢?这篇文章我们从“上帝视角”来看一下。
容器的作用整体性观察
首先我们看下容器的作用的整体性的观察,如图所示:
Spring 的IOC 容器的作用就像图中展示的一样,通过一定的方式加载Configuration Metadata(如果依据前文的介绍,就是XML 格式的配置信息),有了这些配置相关的元数据,那么容器就会根据配置的信息,为整个系统中的对象进行关系的组织,依赖的绑定等等操作,最终得到的一个可以使用的、基于IOC 轻量级容器的系统应用。
所以对于我们来说,提供了业务的POJO 即可,交给Spring 容器,Spring 容器就会给出一个配置好的系统。
对于Spring IOC 容器来说,它实现上述功能的过程基本与描述相似,可以大致分成两个阶段:
- 容器启动阶段
- bean 实例化阶段。
另外需要说明的是,Spring 本身具有高扩展的特性,所以Spring IOC 容器在实现的过程中,结合了这两个阶段的不同的特点,在每个阶段都加入了相应的容器扩展点,于是我们可以按照场景的不同的需要来加入一些自定义的扩展逻辑。
如图所示:
容器启动阶段包含这几个扩展点:
- 加载配置
- 分析配置信息
- 装备到BeanDefinition
- ...
Bean 实例化阶段
- 实例化对象
- 装配依赖
- 生命周期回调
- 对象其他处理
- 注册回调接口
- ...
总结
这篇文章是基于之前介绍过的IOC 的使用,做了一个充分的“上帝视角”的总结。可以帮助读者更清晰的看明白Spring IOC 容器的本质。