activiti通過擴充套件點重寫節點行為

weixin_33766168發表於2018-03-18

在activit專案中,有時需要重寫節點的behaviour,但如果將程式碼反編譯,會為後續升級,及專案打包帶為不方便。  
其實 acitivit已經提供了擴充套件點重寫節點行為。
重寫辦法如下:

  1. activiti在初始化processEngineConfiguration時,設定行為工廠
@Bean(name = "processEngineConfiguration")
    public ProcessEngineConfigurationImpl processEngineConfiguration() {
        SpringProcessEngineConfiguration processEngineConfiguration = new SpringProcessEngineConfiguration();
        processEngineConfiguration.setDataSource(druidDataSource());
        processEngineConfiguration.setTransactionManager(annotationDrivenTransactionManager());
        processEngineConfiguration.setProcessEngineName(ProcessEngines.NAME_DEFAULT);
        //設定全域性事件監聽
        processEngineConfiguration.setTypedEventListeners(this.getGlobalActivitiEventListener());
        //重寫節點行為
        processEngineConfiguration.setActivityBehaviorFactory(new CdpActivityBehaviorFactory());
        //設定主鍵生成
        processEngineConfiguration.setIdGenerator(new ActivitiIdGenerator());
        //設定函式
        processEngineConfiguration.setBeans(FunctionFactory.getFunctionBeans());
        return processEngineConfiguration;
    }

其中關鍵程式碼為

    //重寫節點行為
        processEngineConfiguration.setActivityBehaviorFactory(new CdpActivityBehaviorFactory());

2.類CdpActivityBehaviorFactory是節點行為工廠,設定了所有節點的行為實現類

@Component
public class CdpActivityBehaviorFactory extends DefaultActivityBehaviorFactory {
 public CdpUserTaskActivityBehavior createUserTaskActivityBehavior(UserTask userTask, TaskDefinition taskDefinition) {
        return new CdpUserTaskActivityBehavior(userTask.getId(), taskDefinition);
    }

上述程式碼中CdpUserTaskActivityBehavior是這邊重寫的節點行為類
3.類CdpUserTaskActivityBehavior為節點行為,可以繼承原來的UserTaskActivityBehavior,覆蓋需要重寫的方法即可

public class CdpUserTaskActivityBehavior extends UserTaskActivityBehavior{
//重寫需要改的方法
}

最後強烈提醒一下,節點userTask需要重寫的行為有三個,因為有單例項,序列多例項,並行多例項三種,分別為UserTaskActivityBehavior,ParallelMultiInstanceBehavior,SequentialMultiInstanceBehavior。

相關文章