flowable ContentEngine和ContentEngineConfiguration的关系

来源:互联网 发布:身份证识别器录入软件 编辑:程序博客网 时间:2024/06/15 17:58

一、CommandExecutor

ContentEngineConfiguration继承自 AbstractEngineConfiguration。

在 AbstractEngineConfiguration 中包含一个CommandExecutor 属性。

protected CommandExecutor commandExecutor;

二、ContentManagementService和ContentService

ContentEngineConfiguration中包含两个属性:

    protected ContentManagementService contentManagementService = new ContentManagementServiceImpl();    protected ContentService contentService = new ContentServiceImpl();

三、创建ContentEngine

ContentEngine是通过调用ContentEngineConfiguration实例的buildContentEngine()完成创建的。

 public ContentEngine buildContentEngine() {        init();        return new ContentEngineImpl(this);    }

1、传递CommandExecutor

在调用ContentEngineConfiguration的buildContentEngine()方法时,在 AbstractEngineConfiguration 中包含的CommandExecutor 属性被赋值给ServiceImpl。代码如下:

 protected void initServices() {        initService(contentManagementService);        initService(contentService);    }    protected void initService(Object service) {        if (service instanceof ServiceImpl) {            ((ServiceImpl) service).setCommandExecutor(commandExecutor);        }    }

ServiceImpl是ContentService和ContentManagementService的父类,包含一个CommandExecutor 属性。(见下图)

至此,ContentEngineConfiguration 初始化了ContentService和ContentManagementService,并把父类中的CommandExecutor传递给了这两个类的实例。

2、构建ContentEngine

ContentEngineConfiguration被当作参数传递给ContentEngineImpl的构造方法。

 public ContentEngine buildContentEngine() {        init();        return new ContentEngineImpl(this);    }

ContentEngineImpl通过ContentEngineConfiguration得到ConentService和ContentManagementService,并对外提供。

public ContentEngineImpl(ContentEngineConfiguration engineConfiguration) {        this.engineConfiguration = engineConfiguration;        this.name = engineConfiguration.getEngineName();        this.managementService = engineConfiguration.getContentManagementService();        this.contentService = engineConfiguration.getContentService();        ... }

这里写图片描述

ContentEngine 提供的服务最终的执行者是ContentService和ContentManagementService的父类 ServiceImpl;

而 ServiceImpl的执行器是由 AbstractEngineConfiguration提供的。