`

jBPM(十六): 记录JbpmContext实例的诞生

阅读更多

        在jBPM(十一): 从JbpmContextFilter说起 中, 一句Java语句(JbpmConfiguration.getInstance(jbpmConfigurationResource))引出了好几篇 对ObjectFactory和ObjectInfo的讨论(详见:jBPM(十三): 从ObjectFactory到ObjectInfo ,jBPM(十四): 见证一ObjectInfo实例的诞生 ,jBPM(十五):配置文件到ObjectFactory ), 这篇中接着往下走,看createJbpmContext(jbpmContextName)方法的执行.
(写到这想起了,周六听的讲黄帝内经的广播节目,用主持人的话说,说是,黄帝内经,微言大义,一个字,一个词要讲数分钟或十几分钟.而现在对jBPM 一个方法调用的研究花了不少时间.当然我现在"研究"各方面都不能跟广播节目中讲黄帝内经相比. 不过再往下想下, 国外开源项目jBPM里一个方法调用让我研究了很长时间,那么国内当代有没有什么拿得出手的东东让大家有滋有味地研究欣赏呢?)

        跟着Eclipse中的debug,我们进到JbpmConfiguration类中看createJbpmContext方法的实现. 这个方法中,我们看到核心代码是JbpmContext jbpmContext = (JbpmContext) objectFactory.createObject(name); 也就是objectFactoryImpl对objectFactory接口中定义方法createObject实现.接着追进这个 createObject方法. 在createObject方法中, 先传来的name从namedObjectInfos get出相应的ObjectInfo来, 这里我们看到这个ObjectInfo是JbpmContextInfo实现类.然后再调用createObject(objectInfo)方法.

        在类objectFactoryImpl中,除去与registry相关的辅助功能外, 最终我们定格到getObject(ObjectInfo objectInfo)方法里的object = objectInfo.createObject(this);一句上. 不错, 这也就是在(jBPM(十三): 从ObjectFactory到ObjectInfo )初识ObjectInfo末尾提到的那句.

        由于object = objectInfo.createObject(this)一句中的objectInfo实为JbpmContextInfo,这样就多态地进入 JbpmContextInfo类的方法. 在JbpmContextInfo类里createObject方法中往简单地说,就是先new一个Services实例, 再调用new JbpmContext(services, objectFactory)构造方法生一个JbpmContext出来.

        JbpmContext终于从JbpmConfiguration中创建出来了, 回头看看,有些感叹: xml文件的解析, <jbpm-context>标签到JbpmContextInfo类的转化, ObjectFactory实现类的把配置文件中众多标签对应ObjectInfo类收集起来为createObject做好准备, 以创建一个JbpmConfiguration实例,最终通过JbpmConfiguration间接地调用JbpmContextInfo的 createObject方法.

3
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics