🧅类级别式声明
类级别式声明主要用处就是通过注解形式让普通的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!");
}
@LiteflowMethod(LiteFlowMethodEnum.IS_ACCESS)
public boolean isAcmpAccess(NodeComponent bindCmp){
return true;
}
@LiteflowMethod(LiteFlowMethodEnum.BEFORE_PROCESS)
public void beforeAcmp(NodeComponent bindCmp){
System.out.println("before A");
}
@LiteflowMethod(LiteFlowMethodEnum.AFTER_PROCESS)
public void afterAcmp(NodeComponent bindCmp){
System.out.println("after A");
}
@LiteflowMethod(LiteFlowMethodEnum.ON_SUCCESS)
public void onAcmpSuccess(NodeComponent bindCmp){
System.out.println("Acmp success");
}
@LiteflowMethod(LiteFlowMethodEnum.ON_ERROR)
public void onAcmpError(NodeComponent bindCmp, Exception e){
System.out.println("Acmp error");
}
@LiteflowMethod(LiteFlowMethodEnum.IS_END)
public boolean isAcmpEnd(NodeComponent bindCmp) {
return false;
}
@LiteflowMethod(value = LiteFlowMethodEnum.ROLLBACK)
public void rollbackA(NodeComponent bindCmp) throws Exception {
System.out.println("ACmp rollback!");
}
}
使用者无需继承NodeComponent
了,相应的方法上加上LiteflowMethod
注解,即可完成对任意自定义类的组件化工作。
其中LiteFlowMethod
的作用是把你自己的定义的方法映射成组件的方法。除了有示例上的值外,还有其他的映射方法。具体可以看下普通组件章节。
注意点1
关于参数的参数,这里需要注意的是,方法上参数必须传入NodeComponent bindCmp
这个参数,而且必须是第一个参数。
比如原先的process()
,那么在声明式里就是yourMethodName(NodeComponent bindCmp)
。
如果是原先的onError(Exception e)
,那么在声明式里就是yourMethodName(NodeComponent bindCmp, Exception e)
。
规律很明显,就是原先的参数保留,在第一个位置插入NodeComponent
对象,代替原先的this
。
以前获取上下文Bean是用this
关键字,现在只需从bindCmp中获取就可以了。
方法的名称可以定义成你想要的任何方式。这个并无限制。
注意点2
自己定义方法时,返回值要和常规组件里的对应方法返回值一致。比如普通组件的process
方法是不返回的,比如布尔组件的processBoolean
方法是返回布尔值的。
如果写错,也会发生一点异常,可能会增加你的排查时间。
# 选择组件的声明
声明选择组件在类和方法上都需要加上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";
}
}
# 布尔组件的声明
声明选择组件在类和方法上都需要加上NodeTypeEnum.BOOLEAN
参数。可用于IF,WHILE,BREAK关键字中
@Component("x")
public class XCmp{
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS_BOOLEAN, nodeType = NodeTypeEnum.BOOLEAN)
public boolean processBoolean(NodeComponent bindCmp) throws Exception {
//do your biz
return true;
}
}
# 数值循环组件的声明
声明选择组件在类和方法上都需要加上NodeTypeEnum.FOR
参数。
@Component("x")
public class XCmp{
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS_FOR, nodeType = NodeTypeEnum.FOR)
public int processFor(NodeComponent bindCmp) throws Exception {
//do your biz
return 10;
}
}
# 迭代循环组件的声明
@Component("x")
public class XCmp{
@LiteflowMethod(value = LiteFlowMethodEnum.PROCESS_ITERATOR, nodeType = NodeTypeEnum.ITERATOR)
public int processIterator(NodeComponent bindCmp) throws Exception {
//do your biz
return list.iterator();
}
}
# 注意点
提示
对于类里的其他方法,也都和processXxx
一样的方式去声明。