在jBPM(十一): 从JbpmContextFilter说起 中, 我们从JbpmThreadsServlet开始,引出了JbpmConfiguration类及其实例通过构造方法 JbpmConfiguration(ObjectFactory objectFactory)的创建.那objectFactory是怎么来的呢? 与之相关的又有些什么看点呢? 本篇中将试着做个梳理总结.
ObjectFactory是一个接口. 它有两个方法createObject和hasObject, 这个不难理解,这两个方法跟接口的名字是相对应在的: 对象工厂(objectFactory)也就是要来创建对象(createObject)的,同时可能某些情况下有用就来一个判断某个对象有无 (hasObject)的方法. 在jBPM中它只有一个实现类ObjectFactoryImpl(BTW,Spring对jBPM支持的module中有一个 JbpmObjectFactory,此实现类在此不做讨论),先不看接口定义的两个方法在实现类里都做了些什么, 我们来看这个ObjectFactoryImpl是怎么创建的, 以及创建后又对它做了些什么set.
在JbpmConfiguration类的parseObjectFactory方法里, 我们看到了如下的代码:
ObjectFactoryParser objectFactoryParser = new ObjectFactoryParser();
ObjectFactoryImpl objectFactoryImpl = new ObjectFactoryImpl();
objectFactoryParser
.parseElementsFromResource("org/jbpm/default.jbpm.cfg.xml", objectFactoryImpl);
if (inputStream!=null) {
log.debug("loading specific configuration...");
objectFactoryParser.parseElementsStream(inputStream, objectFactoryImpl);
}
return objectFactoryImpl;
结 合上下文, 不难看出这是解析jBPM的配置文件, 并把配置文件里的相关信息以objectFactory实例的形式保存下来. 具体在解析时又做了些什么呢? 追着objectFactoryParser.parseElementsStream方法,发现最终调用了ObjectFactoryImpl类的 addObjectInfo方法,并在方法addObjectInfo中, 给ObjectFactoryImpl类的属性namedObjectInfos或objectInfos加了传来的ObjectInfo实例.
ObjectInfo? 又是一个新的东东. 它代表什么? 这是一个jBPM解析配置文件过程中很重要的一个概念.先在这里放一放.
上面的分析,我们看出ObjectFactory(也就是ObjectFactoryImpl类)创建后,把配置文件中信息放到了ObjectFactoryImpl属性namedObjectInfos和objectInfos中.
在结束对ObjectFactory分析前,看下其定义的createObject方法(因另一方法hasObject一看就能明白,这里就不再赘述) 做了什么?顺着方法createObject,一直看到了objectInfo.createObject(this)的执行. 又是ObjectInfo?
对,又是ObjectInfo! ObjectInfo还是一个接口, 这个接口有什么实现类? 它对应着配置文件中什么信息呢? 我们将在下一篇中加以梳理总结.