[英]Compiling and using Groovy classes from Java at runtime?
我有一個應用程序,我希望通過讓用戶在Groovy中定義類,最終實現一些接口來實現可擴展性。
關鍵方面是應該在運行時解釋/編譯它。 即我需要我的應用程序來獲取.groovy
並編譯它。 在啟動過程中這樣做是可以的。
然后,當然,我的應用程序應該能夠實例化該類。
我看到兩個解決方案:
1)在應用程序運行時編譯,將類放在類路徑上的某個位置,然后只加載類,假裝它們始終存在。
2)一些更聰明的方法 - 調用編譯器API和一些類加載魔法讓我的系統類加載器看到它們。
我如何選擇2)?
還有其他想法嗎?
美女 : -
由於.groovy
編譯為.class
字節碼,解析該類會給你一個instanceof
Class
。 現在它變成了所有JAVA世界,只有區別,一旦你在實例化后得到了GroovyObject
,你可以根據需要調用方法。
編輯:就這樣它包含在這里:
InputStream groovyClassIS = GroovyCompiler.class
.getResourceAsStream("/org/jboss/loom/tools/groovy/Foo.groovy");
GroovyClassLoader gcl = new GroovyClassLoader();
Class clazz = gcl.parseClass(groovyClassIS, "SomeClassName.groovy");
Object obj = clazz.newInstance();
IFoo action = (IFoo) obj;
System.out.println( action.foo());
和
package org.jboss.loom.migrators.mail;
import org.jboss.loom.tools.groovy.IFoo;
public class Foo implements IFoo {
public String foo(){
return "Foooooooooo Action!";
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.