在上章引擎与引擎配置对象的介绍中,主要介绍了activiti的默认常用的几种引擎配置对象,接下来主要讲下自定义引擎对象以及拦截器.
自定义引擎配置
查看上章的ProcessEngineConfiguration类结构图,我们定义属于自已的引擎配置,只要继承抽象类ProcessEngineConfigurationImp即可.
public class MyProcessEngineConfiguration extends ProcessEngineConfigurationImpl {
public MyProcessEngineConfiguration() {
// 做自定义设置
}
//测试属性,需要在processEngineConfiguration注入
private String userName;
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName() {
return this.userName;
}
@Override
protected CommandInterceptor createTransactionInterceptor() {
return new MyInterceptorA();
}
@Override
protected Collection<? extends CommandInterceptor> getDefaultCommandInterceptors() {
List<CommandInterceptor> interceptors = new ArrayList<CommandInterceptor>();
interceptors.add(new LogInterceptor());
CommandInterceptor transactionInterceptor = createTransactionInterceptor();
if(transactionInterceptor!=null) {
interceptors.add(transactionInterceptor);
}
interceptors.add(new MyInterceptorB());
interceptors.add(new CommandContextInterceptor(commandContextFactory,this));
return interceptors;
}
}
如果注意重写的方法名的话,就可以发现这就是activiti中的拦截器。其拦截器的原理采用了设计模式中的命令模式和责任链模式。
查看org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl源码可以发现, 当初始化流程引擎的时候,会执行下面方法
//org.activiti.engine.impl.cfg.ProcessEngineConfigurationImpl
public ProcessEngine buildProcessEngine() {
init();
return new ProcessEngineImpl(this);
}
以下是init()方法的源码
protected void init() {
initConfigurators();
configuratorsBeforeInit();
initProcessDiagramGenerator();
initHistoryLevel();
initExpressionManager(