实现框架的类的方法为什么会在众多集成者中被调用

来源:互联网 发布:数据统计的软件 编辑:程序博客网 时间:2024/05/22 00:51

以activities为例

实现了:

/** * @author Tom Baeyens */public interface Command <T> {  T execute(CommandContext commandContext);  }

实现类

public class HistoryProcessInstanceDiagramCmd implements Command<InputStream> {protected String historyProcessInstanceId;public HistoryProcessInstanceDiagramCmd(String historyProcessInstanceId) {this.historyProcessInstanceId = historyProcessInstanceId;}public InputStream execute(CommandContext commandContext) {try {CustomProcessDiagramGenerator customProcessDiagramGenerator = new CustomProcessDiagramGenerator();return customProcessDiagramGenerator.generateDiagram(historyProcessInstanceId);} catch (Exception ex) {throw new RuntimeException(ex);}}}
如何execute被调用的呢?

 Command<InputStream> cmd = new HistoryProcessInstanceDiagramCmd(pid);        InputStream is = ProcessEngines.getDefaultProcessEngine().getManagementService().executeCommand(cmd);
重点在于这个传入的方法cmd,

 private final CommandInterceptor first;

  @Override  public <T> T execute(CommandConfig config, Command<T> command) {    return first.execute(config, command);  }
之后根据拦截器list加入的顺序走到这步(activiti源码分析(一)设计模式):其实就是最先传入的cmd自己调用自己的方法
/** * @author Tom Baeyens */public class CommandInvoker extends AbstractCommandInterceptor {  @Override  public <T> T execute(CommandConfig config, Command<T> command) {    return command.execute(Context.getCommandContext());  }




0 0
原创粉丝点击