Flowable 中常见的 监听器接口和抽象类 的详细分类


一、按监听器类型分类

类型接口/抽象类作用对象是否可配置为全局描述
Execution Listener(执行监听器)org.flowable.engine.delegate.ExecutionListener流程实例、执行流(Execution)❌ 不支持直接全局配置监听流程生命周期事件,如流程启动、节点进入/离开等
Task Listener(任务监听器)org.flowable.engine.delegate.TaskListener用户任务(User Task)✅ 支持通过 API 或配置注册为全局监听器监听用户任务的创建、分配、完成等事件
Global Event Listener(全局事件监听器)org.flowable.eventregistry.FlowableEventListenerorg.flowable.common.engine.api.delegate.event.AbstractFlowableEventListener引擎级别事件(如 ACTIVITY_COMPLETED、TASK_CREATED 等)✅ 全局生效可以监听任意事件,适用于整个引擎

二、按接口/抽象类功能分类

1. 面向流程执行的监听器

  • 接口: ExecutionListener
  • 包路径: org.flowable.engine.delegate.ExecutionListener
  • 方法:
    void notify(DelegateExecution execution) throws Exception;
    
  • 使用场景:在流程定义中配置,监听流程或节点的执行事件(如 start、end、take)。
  • 作用对象:流程实例 (DelegateExecution)
  • 是否可全局配置:否(只能绑定到 BPMN 节点)

2. 面向用户任务的监听器

  • 接口: TaskListener
  • 包路径: org.flowable.engine.delegate.TaskListener
  • 方法:
    void notify(DelegateTask delegateTask);
    
  • 使用场景
    • 在 BPMN 文件的任务节点上配置(局部)
    • 通过代码注册为全局任务监听器(全局)
  • 作用对象:用户任务 (DelegateTask)
  • 是否可全局配置:✅ 是(通过 TaskService 或 Spring 配置)

3. 通用事件监听器(全局监听器)

  • 抽象类: AbstractFlowableEventListener
  • 包路径: org.flowable.common.engine.api.delegate.event.AbstractFlowableEventListener
  • 实现方法:
    void onEvent(FlowableEvent event); // 必须重写
    Collection<String> getSupportedEventTypes(); // 指定监听的事件类型
    boolean isFailOnException(); // 异常是否中断流程
    
  • 使用场景:流程定义中配置,监听整个引擎中的各种事件(包括流程、任务、历史、身份链接等)
  • 作用对象:泛化的 FlowableEvent
  • 是否可全局配置:✅ 是(需手动注册为事件监听器)

三、按监听事件来源分类

来源示例事件对应监听器
流程执行流程启动、结束,节点进入、离开ExecutionListener
用户任务创建、分配、完成、添加评论等TaskListener
引擎事件任何类型的事件(ACTIVITY_STARTED, TASK_ASSIGNED, PROCESS_COMPLETED 等)AbstractFlowableEventListener

四、常见监听事件类型(供参考)

FlowableEngineEventType.PROCESS_STARTED
FlowableEngineEventType.PROCESS_COMPLETED
FlowableEngineEventType.ACTIVITY_STARTED
FlowableEngineEventType.ACTIVITY_COMPLETED
FlowableEngineEventType.TASK_CREATED
FlowableEngineEventType.TASK_ASSIGNED
FlowableEngineEventType.TASK_COMPLETED

这些事件可以在 AbstractFlowableEventListener 中通过 getSupportedEventTypes() 方法指定监听。


五、总结对比表

分类接口/类作用对象可否全局配置是否需绑定 BPMN常用方法
执行监听器ExecutionListenerDelegateExecution❌ 否✅ 是(BPMN 配置)notify(DelegateExecution)
任务监听器TaskListenerDelegateTask✅ 是(API 注册)✅ 是(BPMN 配置)notify(DelegateTask)
全局事件监听器AbstractFlowableEventListenerFlowableEvent✅ 是?? 是(BPMN 配置全局选项【事件监听】可选,【执行和任务】监听不可选)onEvent(FlowableEvent)

六、建议使用场景

场景推荐监听器
需要对某个服务任务、用户任务做特定处理ExecutionListenerTaskListener
需要在所有任务创建时记录日志使用 TaskListener + 全局注册
需要统一处理多个流程、任务、历史等事件AbstractFlowableEventListener
需要细粒度控制某个任务的行为(如分配前校验)TaskListener(局部配置)