万字+28张图带你探秘小而美的规则引擎框架LiteFlow(四)
4)Slot
Slot可以理解为业务的上下文,在一个业务流程中,这个Slot是共享的。
Slot有个默认的实现DefaultSlot,DefaultSlot虽然可以用,但是在实际业务中,用这个会存在大量的弱类型,存取数据的时候都要进行强转,颇为不方便。所以官方建议自己去实现自己的Slot,可以继承AbsSlot。
5)DataBus
用来管理Slot的,从这里面可以获取当前业务流程执行的Slot。
四、LiteFlow源码探究
说完核心的组件,接下来就来剖析一下源码,来看一看LiteFlow到底是如何实现规则编排的。
1)FlowExecutor的构造流程
我们这里就以非Spring环境的例子来说,因为在SpringBoot环境底下,FlowExecutor是由Spring创建的,但是创建的过程跟非Spring的例子是一样的。
这里在构建FlowExecutor,传入了一个规则的路径flow.xml,也就是ruleSource属性值。
进入loadInstance这个方法,其实就是直接new了一个FlowExecutor。
进入FlowExecutor构造方法,前面就是简单的赋值操作。然后调用liteflowConfig.isParseOnStart(),这个方法默认是返回true的,接下来会调用init方法,也就是在启动时,就去解析规则文件,保证运行时的效率。
接下来进入init方法。
init方法非常长,来一步一步解析
前面就是校验,不用care
List<String> sourceRulePathList = Lists.newArrayList(liteflowConfig.getRuleSource().split(",|;"));
这行代码的意思就是将我们传入的规则文件路径进行分割成多个路径,从这可以看出支持配置多个规则的文件。对我们这个demo来说其实就是只有一个,那就是flow.xml。
文章转自公众号:三友的java日记