🌯数据上下文的定义和使用
# 默认上下文
LiteFlow提供了一个默认的数据上下文的实现:DefaultContext
。这个默认的实现其实里面主要存储数据的容器就是一个Map。
你可以通过DefaultContext
中的setData
方法放入数据,通过getData
方法获得数据。
建议
DefaultContext
虽然可以用,但是在实际业务中,用这个会存在大量的弱类型,存取数据的时候都要进行强转,颇为不方便。所以官方建议你自己去实现自己的数据上下文。
# 自定义上下文
你可以用你自己的任意的Bean当做上下文进行传入。LiteFlow对上下文的Bean没有任何要求。
自己定义的上下文实质上就是一个最简单的值对象,自己定义的上下文因为是强类型,更加贴合业务。
你可以像这样进行传入:
LiteflowResponse response = flowExecutor.execute2Resp("chain1", 流程初始参数, CustomContext.class);
传入之后, LiteFlow会在调用时进行初始化,给这个上下文分配唯一的实例。你在组件之中可以这样去获得这个上下文实例:
@LiteflowComponent("yourCmpId")
public class YourCmp extends NodeComponent {
@Override
public void process() {
CustomContext context = this.getContextBean(CustomContext.class);
//或者你也可以用这个方法去获取上下文实例,和上面是等价的
//CustomContext context = this.getFirstContextBean();
...
}
}
关于组件之中还可以获得哪些默认的参数,请参考普通组件。
# 多上下文
LiteFlow在新版本中支持了多上下文,在执行的时候同时初始化你传入的多个上下文。在组件里也可以根据class类型很方便的拿到。
你可以像这样进行传入(看不全的可以往后拉):
LiteflowResponse response = flowExecutor.execute2Resp("chain1", 流程初始参数, OrderContext.class, UserContext.class, SignContext.class);
在组件之中可以这样去获得这个上下文实例:
@LiteflowComponent("yourCmpId")
public class YourCmp extends NodeComponent {
@Override
public void process() {
OrderContext orderContext = this.getContextBean(OrderContext.class);
UserContext userContext = this.getContextBean(UserContext.class);
SignContext signContext = this.getContextBean(SignContext.class);
//如果你只想获取第一个上下文,第一个上下文是OrderContext,那么也可以用这个方法
//OrderContext orderContext = this.getFirstContextBean();
...
}
}
帮助我们改善此文档 (opens new window)
上次更新: 2022/10/07, 00:22:18