LiteFlow LiteFlow
💒首页
  • v2.13.2(当前版本)
  • What's New

    • 🌈What' s New In LiteFlow v2.13.2?
  • 历史版本

    • v2.12.X
    • v2.11.X
    • v2.10.X
    • v2.9.X
    • v2.8.X
  • 升级指南

    • 🌈2.13.0升级指南
    • 2.12.4升级指南
    • 2.12.0升级指南
    • 升级到2.9.3说明
    • 升级到2.9.X说明
    • 升级到2.8.X说明
    • 升级到2.7.X说明
👑LF CLUB社区
  • 常见问题
  • 专题解释

    • 如何理解上下文这个概念?
    • Slot是一个什么样的概念,在框架中起到什么样的作用?
💖赞助
🧩插件
🔥PPT
  • 项目介绍
  • 项目成员
  • 更新记录
  • 参与开发
👥加入群聊
🧤谁在使用
  • Gitee (opens new window)
  • GitCode (opens new window)
  • Github (opens new window)

广告采用随机轮播方式显示 ❤️成为赞助商
💒首页
  • v2.13.2(当前版本)
  • What's New

    • 🌈What' s New In LiteFlow v2.13.2?
  • 历史版本

    • v2.12.X
    • v2.11.X
    • v2.10.X
    • v2.9.X
    • v2.8.X
  • 升级指南

    • 🌈2.13.0升级指南
    • 2.12.4升级指南
    • 2.12.0升级指南
    • 升级到2.9.3说明
    • 升级到2.9.X说明
    • 升级到2.8.X说明
    • 升级到2.7.X说明
👑LF CLUB社区
  • 常见问题
  • 专题解释

    • 如何理解上下文这个概念?
    • Slot是一个什么样的概念,在框架中起到什么样的作用?
💖赞助
🧩插件
🔥PPT
  • 项目介绍
  • 项目成员
  • 更新记录
  • 参与开发
👥加入群聊
🧤谁在使用
  • Gitee (opens new window)
  • GitCode (opens new window)
  • Github (opens new window)
  • 🍤LiteFlow简介
  • 🍓项目特性
  • 🧁环境支持

  • 🍟快速开始(Hello world)

  • 🍢配置项

  • 🔗组件

    • 🛍继承式组件

    • 🎁声明式组件

      • 🥭什么叫声明式组件
      • 🧅类级别式声明
        • 普通组件的声明
        • 选择组件的声明
        • 布尔组件的声明
        • 数值循环组件的声明
        • 迭代循环组件的声明
      • 🥥方法级别式声明
  • 🧩EL规则

  • 🌮上下文

  • 🛩执行器

  • 🍋脚本组件

  • 🗂规则配置源

  • 🍼元数据管理

  • 🌌异步中的线程池

  • 🎲动态构造

  • 🧮决策路由

  • 😸生命周期

  • 🎨高级特性

  • ⛱测试用例以及示例

  • 🪂性能表现
  • v2.13.X文档
  • 🔗组件
  • 🎁声明式组件
铂赛东
2022-10-05
目录

🧅类级别式声明

类级别式声明主要用处就是通过注解形式让普通的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
🥭什么叫声明式组件
🥥方法级别式声明

← 🥭什么叫声明式组件 🥥方法级别式声明→

Theme by Vdoing | Copyright © 2020-2025 铂赛东 | MIT License
沪ICP备18012955号-2
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式