1.简单工厂与高级工厂
《spring源码深度解析》一书中曾说:“spring的工厂设计分为两条线,一条是以BeanFactory为主线的简单工厂,一条是以ApplicationContext为主线的高级工厂”。 真是听君一席话,少走十年弯路! 让我自己在这么多的源码中钻来钻去,哪怕再过个三五年,怕也不见得能够理解这种宏观的设计思路。
总之,spirng对工厂的设计的两条线,可以从模块中来大致的分化出来,简单工厂对应的是: spring-beans模块,高级工厂对应的是 spring-context模块。 本着先易后难的思路,先理一理spirngBeans模块的设计。
2.springBeans模块的组成
可以看到,简单工厂除了core模块外,对外并无过多的依赖。 简单工厂的设计,作为spring的两大核心之一,它本身的源码量及设计的复杂度,相较于core模块,要高了许多。
3.springBeans模块对简单工厂的设计
对于简单工厂的各个层次的接口有如下说明解释:
1.BeanFactory作为顶级接口,它提供从工厂中获取Bean的能力,然则,它只能获得单个Bean对象。 是以 其一个子接口: ListableBeanFactory便由此而来;
2.获取bean时,为了扩展相应的能力,如 自动注入,前置后置处理等,是以便有了子接口: AutowireCapableBeanFactory
3.在设计层面,猜想是借鉴了 类加载器的设计思路,允许 bean工厂存在上下级关系,是以有了: HierarchicalBeanFactory接口
4.这里存在多个顶层抽象接口,并且有相应的子接口进行聚合,在提供API方面,采用的是抽象类的方式,屏蔽了操作的复杂性。
4.springBeans模块对Bean的设计
5.springBeans模块对工厂流程的设计
5.1bean工厂后置处理器
5.2bean后置处理器
5.3bean生成的相关流程
5.4属性注入相关
5.5说明
这块代码量太大了,有很多设计来不及细看,暂时先粗略的看一下,因为自己对整个流程还处于似懂非懂的状态,目前需要快速的整理一下骨架。 所以这里吃相就稍稍难看了一点。
在简单工厂时,貌似还不涉及到bean的后置工厂处理器,以及bean的后置处理器的处理。但是它是03年的源码,也就是说在设计之初就已考虑在内。
6.对springBeans模块简单工厂的理解:
6.1Java宏观程序:
6.2Java微观运行流程:
6.2.1虚拟机的启动流程:
1.初始化本地核心类
2.开启gc线程
3.初始化及监测程序
6.2.2类加载流程
执行new操作时,jvm的执行引擎如下:Jvm层面的执行流程:
6.2.3 Spring的简单工厂原理:
7.资源
文中所用到的jvm源码,可查看文档:c++实现的jvm
文中所使用的spring源码,地址:spring5源码地址