16 张图解锁 Spring 的整体脉络(下)
IOC 容器
当然,这时候出场的肯定是 IOC 啦。
我们都知道 IOC 是 控制反转 ,但是别忘了 容器 这个词,比如 容器的根接口BeanFactory ,容器的实现👇
- ClassPathXmlApplicationContext
- AnnotationConfigApplicationContext
- FileSystemXmlApplicationContext
同时我们要注意这里无处不在的 后置处理器 xxxPostProcessor 🐷
这个是 Spring 中扩展性强的原因了!
我们可以在各个过程中合理应用这些 PostProcessor 来扩展,或者修改 Bean 定义信息等等
可以看到在这个容器中,完成了 Bean 的初始化,而这个过程还有很多细节 ,请往下看看 👇
DI 到时写 属性填充 时再介绍 🐷
BeanFactory 后置处理器
作为 IOC 容器根接口的 BeanFactory ,有着非常高的扩展性,比如最开始获取原料 BeanDefinition 时,就出现了两个针对 BeanFactory 工厂的后置处理器 👇
BeanDefinitionRegistryPostProcessor
通过该接口,我们可以自己掌控我们的 原料,通过 BeanDefinitionRegistry 接口去 新增,删除,获取我们这个 BeanDefinition
BeanFactoryPostProcessor
通过该接口,可以在 实例化对象前,对 BeanDefinition 进行修改 ,冻结 ,预实例化单例 Bean 等
经过上面层层阻碍后,我们最终会来到目标方法 getBean ,将原料投入生产,最终获取一个个 Bean 对象出来
那么随之而来的就是这个 Bean 的生命周期啦 😄
Bean 生命周期
Bean 的创建和管理有标准化的流程!
这里在我们的工厂 BeanFactory 中写得很清楚 👇
总共 14 个步骤,是不是一下子就清晰多了 😄
在看这部分的源码时,要多注意两个英文单词 😝
- 实例化 👉 Instantiation
- 初始化 👉 Initialization
ps: 别看快搞错了 哈哈 😝
仔细阅读上面这 14 个步骤,会发现前面 8 个都是 Aware 接口,而他们的作用也很简单,就是获取 xxAware 这个单词的前缀 xx 😄
比如事件发布器 ApplicationEventPublisher ,只要你实现了 ApplicationEventPublisherAware 接口,就可以获取 事件发布器 ApplicationEventPublisher !
Bean 后置处理器
在实例化 和 初始化流程中,把这个 Bean 的后置处理器 BeanPostProcessor 安排上,就得到下图啦 👇
这里留意下 实例化 有扩展点 InstantiationAwareBeanPostProcessor , 初始化 扩展点 BeanPostProcessor 就非常多啦,我们主要来关注下这个 AOP
AOP
那么 AOP 是在哪个步骤代理对象的呢?👇
可以在 AbstractAutoProxyCreator 类中看到 👇
总结
本文就先介绍到这里啦 🐖
主要介绍了 Spring 里面的这些脉络,方便小伙伴们对它有个整体的印象先~
再介绍其中的一些扩展点,比如从源材料开始的 BeanFactoryPostprocessor ,到产物 Bean 的 BeanPostprocessor 。
实例化,初始化的顺序,Bean 的生命周期,以及 BeanFactory 及子类扩展的功能,再到 ApplicationContext 的功能。
还有这个核心机制: 工厂+XML+反射,以及 AOP 发生的地方。😋
- 点赞
- 收藏
- 关注作者
评论(0)