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