Java和groovy相互呼叫
java interface
- package groovy;
- public interface IFoo {
- public Object run(Object foo, Object bar);
- }
groovy implements
- package groovy;
- class Foo implements IFoo {
- def x
- public Object run(Object foo, Object bar) {
- println 'Hello World!'
- x = 123
- println foo * 10
- println bar
- return 'success'
- }
- }
java call groovy
- package groovy;
- import groovy.lang.GroovyClassLoader;
- import groovy.lang.GroovyObject;
- import java.io.File;
- public class InvokeGroovy {
- public static void main(String[] args) {
- ClassLoader cl = new InvokeGroovy().getClass().getClassLoader();
- GroovyClassLoader groovyCl = new GroovyClassLoader(cl);
- try {
- @SuppressWarnings("rawtypes")
- Class groovyClass = groovyCl.parseClass(new File(InvokeGroovy.class.getResource("/groovy/Foo.groovy").toURI()));
- IFoo foo = (IFoo) groovyClass.newInstance();
- System.out.println(foo.run(new Integer(2), "More parameter..."));
- System.out.println("=============================");
- GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
- System.out.println(groovyObject.invokeMethod("run", new Object[]{new Integer(2),"More parameter..."}));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
java execute groovy script
- package groovy;
- import groovy.lang.Binding;
- import groovy.lang.GroovyShell;
- import javax.script.ScriptEngine;
- import javax.script.ScriptEngineManager;
- import javax.script.ScriptException;
- public class TestEval {
- public Object doit() {
- ScriptEngineManager factory = new ScriptEngineManager(TestEval.class.getClassLoader());
- ScriptEngine scriptEngine = factory.getEngineByName("groovy");//或者"Groovy" groovy版本要1.6以上的
- try {
- scriptEngine.put("test", "hello world!");
- scriptEngine.put("outer", this);
- scriptEngine.eval("println test; outer.java_out()");
- } catch (ScriptException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- Binding bb = new Binding();
- bb.setVariable("test", "hello world!");
- bb.setProperty("outer", this);
- GroovyShell gs = new GroovyShell(bb);
- return gs.evaluate("println test; outer.java_out()");
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- TestEval te = new TestEval();
- te.doit();
- }
- public void java_out(){
- System.out.println("out from java");
- }
- }
相關文章
- webview js和java相互呼叫WebViewJSJava
- C和Go相互呼叫Go
- js和vue方法的相互呼叫(iframe父子頁面的方法相互呼叫)。JSVue
- python和c++的相互呼叫教程PythonC++
- Android JNI開發系列之Java與C相互呼叫AndroidJava
- OC 與 Swift 相互呼叫Swift
- iframe父子級相互呼叫
- Java開發搭配GroovyJava
- 微服務之間的相互呼叫微服務
- c與c++的相互呼叫C++
- CXX庫提供Rust和C+ 之間的安全相互呼叫Rust
- 原生實現C#和Lua相互呼叫-Unity3D可用C#Unity3D
- 記錄個Java/Groovy的小問題:空字串呼叫split函式返回非空陣列Java字串函式陣列
- Groovy + Java 混合程式設計方案:GMavenJava程式設計Maven
- go語言與c語言的相互呼叫GoC語言
- springboot整合eureka,服務相互呼叫簡單示例Spring Boot
- groovy-gradle-setting.gradle和sourceGradle
- groovy
- WebAssembly實踐指南——C++和Rust透過wasmtime實現相互呼叫例項WebC++RustASM
- Java動態指令碼Groovy,高階啊!Java指令碼
- Vue--子元件之間相互呼叫及傳值Vue元件
- oc與swift檔案的相互呼叫方式——橋接Swift橋接
- 鴻蒙HarmonyOS實戰-Web元件(前端函式和應用側函式相互呼叫)鴻蒙Web元件前端函式
- Java執行groovy指令碼的兩種方式Java指令碼
- java 物件與xml相互轉換Java物件XML
- Java方法02:方法的定義和呼叫Java
- Python與Javascript相互呼叫超詳細講解(四)使用PyNode進行Python與Node.js相互呼叫項(cai)目(keng)實(jing)踐(yan)PythonJavaScriptNode.jsAI
- Java動態指令碼Groovy讀取配置檔案Java指令碼
- java 字串與檔案相互轉換Java字串
- Java 類載入之匿名類和主類相互依賴問題Java
- Groovy 小記 it 關鍵字和 IDE 報錯IDE
- java反射構建物件和方法的反射呼叫Java反射物件
- java反射呼叫set和get方法的通用類Java反射
- Android 和 Webview 如何相互 sayHello(一)AndroidWebView
- java呼叫JavaScriptJavaScript
- EOS JAVA 呼叫Java
- Java呼叫ZookeeperJava
- eureka踩過的坑之註冊服務相互之間呼叫
- 組合語言-019(彙編程式與c\c++相互呼叫)組合語言C++