网站建设设计制作外包,网站多久备份一次,网站更新维护 怎么做,wordpress主题enfoldGroovy简介
Groovy是用于Java虚拟机的一种敏捷的动态语言#xff0c;是一种成熟的面向对象编程语言#xff0c;又是一种纯粹的脚本语言。Groovy运行在JVM环境上#xff0c;在语法上兼具java 语言和脚本语言特点#xff0c;大大简化了语法。同时又具有闭包和动态语言中的其…Groovy简介
Groovy是用于Java虚拟机的一种敏捷的动态语言是一种成熟的面向对象编程语言又是一种纯粹的脚本语言。Groovy运行在JVM环境上在语法上兼具java 语言和脚本语言特点大大简化了语法。同时又具有闭包和动态语言中的其他特性弥补了单纯的Java代码所不具备的动态性我们可以在程序运行时任意修改代码逻辑不需要重新发布。
直接抛场景
以下是一个JSON字符串
{routeId: A,settingKey: 2,memberId: 1
}如果我现在有一个诉求是根据routId路由不同的下游分支 那你会怎么写呢 如果我现在的JSON变为下面这种情况上面的代码是否就不合适了呢
{routeId: A,settingKey: 2,memberId: 1,body::{auditStatus:init,itemId:9527}
}所以最优秀的想法是可以把下面的这种规则映射为代码。
routeIdA settingKey2routeIdB落地实战解上面的问题
代码在最后面先看思路
首先我先定义了一个抽象类
public abstract class AbstractFilterFlowNode implements AbstractFlowNode {public abstract Boolean filter(Object data);Overridepublic Boolean execue(Context context) {Object outData context.outData;return filter(outData);}
}现在我定义一个规则
[136001002].contains(root.productId.toString())现在我想把这个规则生成一个AbstractFilterFlowNode的实现类。
String expString [136001002].contains(root.productId.toString());String script FlowFilterFactory.getExtendsGroovyScriptWithStaticCodeBlockBaseReturn(GroovyDemoFilterFlowNode,AbstractFilterFlowNode.class,,filter,Object.class,root,expString,java.lang.Boolean);System.out.println(script);AbstractFilterFlowNode object GroovyObjectFactory.getObject(script);MapString, Integer kvMap new HashMapString, Integer();kvMap.put(productId, 136001002);kvMap.put(memberId, 1);kvMap.put(settingKey, 2);String jsonStr JSONUtil.toJsonStr(kvMap);Object obj JSON.parseObject(jsonStr, Object.class);System.out.println(obj);boolean filter object.filter(obj);System.out.println(filter);源码下载
https://gitee.com/cbeann/Demooo/blob/master/groovy-demo/src/main/java/App.java