Small-Spring学习笔记(一)

207 阅读2分钟

根据小傅哥的Small-spring学习手撸Spring已经一段时间了,特在此把学习笔记记录一下。 本篇学习笔记基于Small-Spring的step1和step2.

首先我们看下类图

image.png

相信每个人在看这种类图的时候,都会被其中的实现、继承关系弄得晕头转向。其实把接口和实现类分开是设计模式的一种原则,为了清晰的弄清楚类的关系,我们可以先把类图中的接口隐藏掉。

image.png

这样我们很清楚就理解了其中的逻辑,DefaultSingletonBeanRegistry是单例Bean的实现功能,而AbstractBeanFactory是抽象的bean创建和获取的功能,让AbstractBeanFactory继承DefaultSingletonBeanRegistry就分隔了注册bean和创建bean的逻辑,实现了代码复用。

AbstractBeanFactory的核心功能是根据Bean的名称调用getBean获取beanDefinition,然后根据对应的class返回class的实例。注意这里getBean方法其实是一个框架,因为其返回时调用的createBean只是一个抽象方法。所以,AbstractBeanFactory其实是一个框架,目的是构建一个获取并返回实例的模板。

通过上面的几个接口和抽象我们可以明白,接口是实现方法的声明和实现分离,抽象类是实现逻辑的模板化、抽象化。复杂逻辑的核心其实就是通过接口、抽象、继承、实现的组合来实现的。把一个流程提出共性、找出模板化的逻辑、提供多种实现接口就可以把复杂逻辑变得易于扩展、易于维护。

image.png

上图是我做了一个更加具体化的图,最左侧的色块表示最核心的四个模块,中间的色块是每个模块中的方法和抽象方法,右边的虚线表示最终DefaultListableBeanFactory中的所有public方法。

总结

step1和step2主要实现了通过分离bean的class类和实例,用单例的方式缓存bean实例,通过模板方法抽取bean加载的逻辑和实例化逻辑。在类图上去除接口可以帮助我们更好的理解复杂逻辑的类之间的关系。