前面说到MainDesigner的main方法中通过ModuleContext来加载解析designer-startup.xml的。
下面详细说说具体过程。
1 ModuleContext位于fine-core.jar包下,com.fr.module.ModuleContext,看一下它的parseRoot方法
这里看到实际的解析是由FineModuleParser来完成的。
2 com.fr.module.engine.build.FineModuleParser的parse方法:
可以看到将配置文件的内容封装到ModuleConfig对象中了。然后使用ModuleBuilder来build模块.
3 com.fr.module.engine.build.ModuleBuilder的build方法
从上面可以看出,先调用内部的build方法得到根模块,finishLink是将所有的模块用链表的格式连接起来。ActivatorExtension.executePrepare(var1),是如果activator实现了com.fr.module.extension.Prepare接口,就调用一下prepare方法,这个接口的作用是在调用activator的start方法前做一些准备工作。
看一下内部的 build方法:
从上面可以看出,首先创建Activator实例,然后创建module,然后再构建子module。
看一下createActivator:
这很简单,就是根据类名来创建实例.
看一下FineModule.create
上面可以看出是直接new一个FineModule实例与这个Activator实例关联上,然后这个module又与一个Context关联上,Context的概念后面讲,看看Context是如何跟Module关联的。
从上面看出,也是new一个ContextImpl实例来与这个Module实例关联的,activator又与Context实例关联上。
从上面看出这里有三个概念,Module,Activator,Context,这三者通过上面的过程就关联上了。
更多内容:https://blog.csdn.net/sixingbugai?spm=1000.2115.3001.5343
|