groovy之動態指令碼的使用
// 首先建立一個Groovy指令碼管理器
package com.groovy;
import static com.utils.lang.StrEx.isEmpty;
import groovy.lang.GroovyShell;
import javax.script.Bindings;
import javax.script.Compilable;
import javax.script.CompiledScript;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class GroovyShellManager {
public static final GroovyShellManager inst = new GroovyShellManager();
final ClassLoader cl = GroovyShell.class.getClassLoader();
final ScriptEngineManager factory = new ScriptEngineManager(cl);
final ScriptEngine engine = factory.getEngineByName("groovy");
final Compilable compilable = (Compilable) engine;
// 獲取到一個Bindings物件,在執行指令碼之前,需要將所有用到的java方法註冊到bindings中
public final Bindings createBindings() {
final Bindings binding = engine.createBindings();
return binding;
}
// 此方法的作用是將傳入的指令碼字串編譯成指令碼物件
public final CompiledScript compile(String script) throws Exception {
if(isEmpty(script))
return null;
try {
return compilable.compile(script);
} catch (Exception e) {
throw e;
}
}
}
// 呼叫方式說明:
// 呼叫前的準備工作
final GroovyShellManager groovy = GroovyShellManager.inst;
final Bindings b = groovy.createBindings();
// b.put("key", value); key:指令碼中該類的別名,value:任何Object物件都可放入
b.put("x9", x9Func);
b.put("dna", dnaFunc);
b.put("ctx", g51Ctx);
// 動態傳入需要註冊的方法
b.put(k1, v1);
b.put(k2, v2);
// 呼叫
CompiledScript script;
if (script == null || bindings == null)
return null;
Object obj = script.eval_r(bindings);// obj 即為返回的執行結果
動態指令碼的編寫,和java程式碼類似
def firstLevel = voucherDetails.get(0).getFirstLevelSubjectRecid();
def firstSubjectName = x9.onGetFieldValue(ctx, "SUBJECT", firstLevel, "stdname");
def firstSubjectCode = x9.onGetFieldValue(ctx, "SUBJECT", firstLevel, "stdcode");
return "[$firstSubjectCode]$firstSubjectName";
// 注:def是動態型別的意思,和js中的var類似
對於簡單的返回值,不需要return:
x9.sumShowText(voucherDetails, "borrow");
package com.groovy;
import static com.utils.lang.StrEx.isEmpty;
import groovy.lang.GroovyShell;
import javax.script.Bindings;
import javax.script.Compilable;
import javax.script.CompiledScript;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class GroovyShellManager {
public static final GroovyShellManager inst = new GroovyShellManager();
final ClassLoader cl = GroovyShell.class.getClassLoader();
final ScriptEngineManager factory = new ScriptEngineManager(cl);
final ScriptEngine engine = factory.getEngineByName("groovy");
final Compilable compilable = (Compilable) engine;
// 獲取到一個Bindings物件,在執行指令碼之前,需要將所有用到的java方法註冊到bindings中
public final Bindings createBindings() {
final Bindings binding = engine.createBindings();
return binding;
}
// 此方法的作用是將傳入的指令碼字串編譯成指令碼物件
public final CompiledScript compile(String script) throws Exception {
if(isEmpty(script))
return null;
try {
return compilable.compile(script);
} catch (Exception e) {
throw e;
}
}
}
// 呼叫方式說明:
// 呼叫前的準備工作
final GroovyShellManager groovy = GroovyShellManager.inst;
final Bindings b = groovy.createBindings();
// b.put("key", value); key:指令碼中該類的別名,value:任何Object物件都可放入
b.put("x9", x9Func);
b.put("dna", dnaFunc);
b.put("ctx", g51Ctx);
// 動態傳入需要註冊的方法
b.put(k1, v1);
b.put(k2, v2);
// 呼叫
CompiledScript script;
if (script == null || bindings == null)
return null;
Object obj = script.eval_r(bindings);// obj 即為返回的執行結果
動態指令碼的編寫,和java程式碼類似
def firstLevel = voucherDetails.get(0).getFirstLevelSubjectRecid();
def firstSubjectName = x9.onGetFieldValue(ctx, "SUBJECT", firstLevel, "stdname");
def firstSubjectCode = x9.onGetFieldValue(ctx, "SUBJECT", firstLevel, "stdcode");
return "[$firstSubjectCode]$firstSubjectName";
// 注:def是動態型別的意思,和js中的var類似
對於簡單的返回值,不需要return:
x9.sumShowText(voucherDetails, "borrow");
相關文章
- Java動態指令碼Groovy,高階啊!Java指令碼
- Java動態指令碼Groovy讀取配置檔案Java指令碼
- JAVA與groovy指令碼的結合使用Java指令碼
- [Groovy]Groovy指令碼的5種執行方式指令碼
- Groovy動態解析
- java中呼叫groovy指令碼Java指令碼
- 使用expect執行動態指令碼指令碼
- shell動態指令碼和pl/sql動態指令碼的比較指令碼SQL
- Quick-Task 動態指令碼支援框架之使用介紹篇UI指令碼框架
- 指令碼的動態載入指令碼
- Java執行groovy指令碼的兩種方式Java指令碼
- nGrinder中快速編寫groovy指令碼01-指令碼結構指令碼
- 基於Groovy的規則指令碼引擎實戰指令碼
- IDEA 利用groovy指令碼生成註釋Idea指令碼
- iOS使用指令碼跟隨工程程式碼動態生成FrameworkiOS指令碼Framework
- spring+groovy實現動態程式碼注入執行Spring
- 動態建立檢視指令碼指令碼
- Groovy探索之Gpath和List的結合 更加Groovy風格的程式碼
- Groovy探索 使用集合方法,寫出更加Groovy風格的程式碼
- 動態引用外部的Javascript指令碼檔案JavaScript指令碼
- 利用shell指令碼生成動態sql指令碼SQL
- jenkins2 -pipeline 常用groovy指令碼Jenkins指令碼
- Linux管理指令碼之自動執行指令碼Linux指令碼
- 複雜多變場景下的Groovy指令碼引擎實戰指令碼
- Quick-Task 動態指令碼支援框架之結構設計篇UI指令碼框架
- 動態更新資料庫指令碼——Mysql資料庫指令碼MySql
- 動態載入javascript指令碼程式碼例項JavaScript指令碼
- 24_上機動手實戰演練基於groovy指令碼進行partial update指令碼
- Xcode新增Shell指令碼打包靜態庫和動態庫XCode指令碼
- 風控規則引擎(一):Java 動態指令碼Java指令碼
- jQuery實現的動態載入指令碼檔案程式碼例項jQuery指令碼
- groovy之範圍特性
- velocity中使用evaluate指令動態解析屬性
- JSR223 Java使用指令碼引擎動態修改業務邏輯JSJava指令碼
- Dubbo原始碼之動態編譯原始碼編譯
- Java 中使用動態程式碼Java
- 檢測mysql狀態的指令碼MySql指令碼
- nGrinder中快速編寫groovy指令碼04-傳送POST請求指令碼