🍣与Java进行交互
# 和数据上下文进行交互
因为LiteFlow组件与组件之间的数据交互都在上下文中,所以在脚本语言中,你可以通过你定义数据上下文的className的驼峰形式来获取数据。
比如你的上下文类叫OrderContext
,那么脚本中的就用orderContext
这个关键字来获取数据或调用方法。
如果你是多上下文,同样的,你也可以在脚本中用多个上下文来获取数据或调用context内部的逻辑方法。
比如,你想获取UserContext
中的userName
对象。你可以这样写(以下以groovy作例子):
<node id="s1" name="普通脚本" type="script">
<![CDATA[
//你可以这样定义
def name = userContext.userName;
//也可以这样定义,如果你对userName有getter方法的话
def name = userContext.getUserName();
//同理,你可以调用数据上下文中的任意方法
userContext.doYourMethod();
]]>
</node>
# 元数据
在脚本中可以用通过_meta
关键字获取元数据,可以通过_meta.xxx
获取元数据,元数据里包括:
- slotIndex: slot下标,可以通过FlowBus.getSlot(slotIndex)来获得slot数据
- currChainId: 当前执行chain的名称
- nodeId: 当前执行node的Id
- tag: tag值,关于tag的说明请查看组件标签
- cmpData: 组件规则参数,关于cmpData的说明请查看组件参数
- requestData: 流程初始参数
- subRequestData: 当前隐式流程的入参,如果此节点编排在隐式流程里的话,能获取到,反之不能
# 和自定义的JavaBean进行交互
LiteFlow从v2.9.0开始支持在脚本中注入你自己定义的任何java对象。
在spring体系中,你只需要在你需要注入的java对象上使用@ScriptBean
标注,即可完成注入。
@Component
@ScriptBean("demo")
public class DemoBean1 {
@Resource
private DemoBean2 demoBean2;
public String getDemoStr1(){
return "hello";
}
public String getDemoStr2(String name){
return demoBean2.getDemoStr2(name);
}
}
以上例子中,脚本里就可以直接使用demo
关键字来调用getDemoStr1()
和getDemoStr2()
方法了。
我们在LiteFlow 2.9.5版本支持了@ScriptBean
的指定方法和排除方法功能。
如果你想指定这个类中的某2个方法可以被脚本访问到,你可以这样写:
@Component
@ScriptBean(name = "demo", includeMethodName = {"test1","test2"})
public class DemoBean3 {
public String test1(String name){
...
}
public String test2(String name){
...
}
public String test3(String name){
...
}
}
这样你在脚本中只能访问test1
和test2
方法。
如果你想指定这个类中的某些访问无法被脚本访问到,你可以这样写:
@Component
@ScriptBean(name = "demo", excludeMethodName = {"test2","test3"})
public class DemoBean4 {
public String test1(String name){
...
}
public String test2(String name){
...
}
public String test3(String name){
...
}
}
这样你在脚本中只能访问到test1
方法了。
提示
需要注意的是,java对象在spring体系中一定要注册进上下文,如果不注册进上下文,光加@ScriptBean
注解也是没用的。
在非spring体系下面,如果你要把自己的定义的java对象注入脚本,则需要手动写代码(最好在启动应用的时候):
ScriptBeanManager.addScriptBean("demo", new DemoBean());
帮助我们改善此文档 (opens new window)
上次更新: 2023/03/17, 01:44:42