Activiti源码——渐入源码

深入流程引擎配置(ProcessEngineConfiguration)、流程引擎(ProcessEngine)初始化的源码学习,分析其精巧的设计思想。

activiti的使用依赖于流程引擎的服务,流程引擎的初始化及后续执行依赖于配置,activiti作为一个第三方框架来使用与其它框架基本一致,可以概括为:配置文件+相关jar包+api调用。activiti在设计其配置文件及对应模型对象时采用了借助spring bean的方式,即:xml配置文件中的配置内容以bean为单位,如下图:
在这里插入图片描述
这种设计比较巧妙,借助spring的api即可完成解析工作,避免重复解析,只要项目中使用了spring就不必担心;同时借助spring将解析出来的bean注入流程引擎配置对象(ProcessEngineConfiguration),这样就可以通过在配置文件中增加bean配置来灵活的扩展流程引擎的特性,activiti也正是这样做的。

从源码可以明显看出流程引擎的初始化工作非常多,但大多是以准备工作为主,下面将优先了解几个与流程运行息息相关的核心初始化工作。
初始化历史级别:
activiti提供了四种级别的历史记录保存方式,级别由低到高依次是:none、activity、audit、full,级别越高保存历史记录越详细,默认是audit级别。
初始化表达式管理器:主要用于解析流转线上的条件表达式,来判断流程流转的方向
初始化数据源:将配置文件中的数据库连接配置应用到数据源对象中
初始化计时器:提供统一的全局计时器,在进行数据库持久化操作时能够保证时间上的一致
初始化命令上下文工厂:用于创建命令上下文
初始化事务上下文工厂:用于创建事务上下文,activiti默认提供了mybatis的事务上下文工厂
初始化命令执行器:包括初始化默认命令配置、schema命令配置、命令调用器、命令拦截器、命令执行器

从以上几个初始化工作中可以看出activiti源码大量的使用了设计模式,有工厂模式、命令模式、委派模式等等,面向接口设计、职责单一、代码质量高。activiti将所有的操作统一以命令的方式来表达,为每一个命令产生上下文来作为支撑环境,这里activiti有一个值得学习的设计:每一个命令都不是单独执行,而是以拦截器链的方式执行,在链的末端将执行真正的命令。拦截器链上默认有这样几个拦截器:日志拦截器、命令上下文拦截器,日志拦截器可以记录每个命令的执行时间,当出现性能问题时能够帮助定位问题所在,命令上下文拦截器则是运用了工厂模式来产生命令上下文。这个拦截器链还支持扩展自定义的拦截器,如事务拦截器。这个拦截器链设计很巧妙,因为它的实现看起来却很简单,只是使用了java的try{…}finally{…}。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值