1. 程式人生 > >flowable ContentEngine和ContentEngineConfiguration的關係

flowable ContentEngine和ContentEngineConfiguration的關係

一、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提供的。