🧅类级别式声明
类级别式声明主要用处就是通过注解形式让普通的java bean变成LiteFlow的组件。无需通过继承类或者实现接口的方式。
由于LiteFlow的组件常规方式下需要继承类来定义,使得你无法再继承自己业务的类了。这个特性可以解决这个问题。但是和常规组件一样,需要一个类对应一个组件。
# 普通组件的声明
你可以如下去进行一个普通组件的声明:
@LiteflowComponent("a")
public class ACmp{
@LiteflowMethod(LiteFlowMethodEnum.PROCESS, nodeType = NodeTypeEnum.COMMON)
public void processAcmp(NodeComponent bindCmp) {
System.out.println("ACmp executed!");
}
}
使用者无需继承NodeComponent
了,相应的方法上加上LiteflowMethod
注解,即可完成对任意自定义类的组件化工作。
其中@LiteFlowMethod
的作用是把你自己的定义的方法映射成组件的注解。
原本继承式组件中可以覆盖的几个方法,在类声明式组件中也可以定义,需要像这么去定义:
@LiteflowComponent("a")
public class ACmp{
@LiteflowMethod(LiteFlowMethodEnum.PROCESS, nodeType = NodeTypeEnum.COMMON)
public void processAcmp(NodeComponent bindCmp) {
System.out.println("ACmp executed!");
}
@LiteflowMethod(LiteFlowMethodEnum.IS_ACCESS, nodeType = NodeTypeEnum.COMMON)
public boolean isAcmpAccess(NodeComponent bindCmp){
return true;
}
@LiteflowMethod(LiteFlowMethodEnum.BEFORE_PROCESS, nodeType = NodeTypeEnum.COMMON)
public void beforeAcmp(NodeComponent bindCmp){
System.out.println("before A");
}
@LiteflowMethod(LiteFlowMethodEnum.AFTER_PROCESS, nodeType = NodeTypeEnum.COMMON)
public void afterAcmp(NodeComponent bindCmp){
System.out.println("after A");
}
@LiteflowMethod(LiteFlowMethodEnum.ON_SUCCESS, nodeType = NodeTypeEnum.COMMON)
public void onAcmpSuccess(NodeComponent bindCmp){
System.out.println("Acmp success");
}
@LiteflowMethod(LiteFlowMethodEnum.ON_ERROR, nodeType = NodeTypeEnum.COMMON)
public void onAcmpError(NodeComponent bindCmp, Exception e){
System.out.println("Acmp error");
}
@LiteflowMethod(LiteFlowMethodEnum.IS_END, nodeType = NodeTypeEnum.COMMON)
public boolean isAcmpEnd(NodeComponent bindCmp) {
return false;
}
@LiteflowMethod(value = LiteFlowMethodEnum.ROLLBACK, nodeType = NodeTypeEnum.COMMON)
public void rollbackA(NodeComponent bindCmp) throws Exception {
System.out.println("ACmp rollback!");
}
}
这里有几点注意的事项,必须要仔细阅读:
- 方法名没有要求,起你任意想起的名字。
- 这个方法是什么不由方法名决定,是由@LiteflowMethod标注上的
LiteFlowMethodEnum
属性决定。 - 方法上参数必须传入
NodeComponent bindCmp
这个参数,而且必须是第一个参数。 - 碰到原本就有参数的,比如
onError(Exception e)
,那么在声明式里就是yourMethodName(NodeComponent bindCmp, Exception e)
。 - 原本用
this
调用的,现在用bindCmp
对象中调用。 - 方法的返回值要和继承式组件里的返回值一致,比如继承式的布尔组件的
processBoolean
方法是返回布尔值的,这里也要返回布尔值。如果写错,会增加你的排查时间。
# 选择组件的声明
@LiteflowMethod上需要加上NodeTypeEnum.SWITCH
参数,其他规则和普通组件一致。
@LiteflowComponent("e")
public class ECmp{
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS_SWITCH, nodeType = NodeTypeEnum.SWITCH)
public String processSwitch(NodeComponent bindCmp) throws Exception {
System.out.println("Ecomp executed!");
return "g";
}
}
# 布尔组件的声明
@LiteflowMethod上需要加上NodeTypeEnum.BOOLEAN
参数,其他规则和普通组件一致。
@LiteflowComponent("x")
public class XCmp{
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS_BOOLEAN, nodeType = NodeTypeEnum.BOOLEAN)
public boolean processBoolean(NodeComponent bindCmp) throws Exception {
//do your biz
return true;
}
}
# 数值循环组件的声明
@LiteflowMethod上需要加上NodeTypeEnum.FOR
参数,其他规则和普通组件一致。
@LiteflowComponent("x")
public class XCmp{
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS_FOR, nodeType = NodeTypeEnum.FOR)
public int processFor(NodeComponent bindCmp) throws Exception {
//do your biz
return 10;
}
}
# 迭代循环组件的声明
@LiteflowMethod上需要加上NodeTypeEnum.ITERATOR
参数,其他规则和普通组件一致。
@LiteflowComponent("x")
public class XCmp{
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS_ITERATOR, nodeType = NodeTypeEnum.ITERATOR)
public Iterator<?> processIterator(NodeComponent bindCmp) throws Exception {
//do your biz
return list.iterator();
}
}
帮助我们改善此文档 (opens new window)
上次更新: 2025/02/16, 21:26:30