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

以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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值