Ond*_*žka 11 java groovy interpreter compilation
我有一个应用程序,我希望通过让用户在Groovy中定义类,最终实现一些接口来实现可扩展性.
关键方面是应该在运行时解释/编译它.即我需要我的应用程序来进行.groovy
编译.在启动过程中这样做是可以的.
然后,当然,我的应用程序应该能够实例化该类.
我看到两个解决方案:
1)在应用程序运行时编译,将类放在类路径上的某个位置,然后只加载类,假装它们始终存在.
2)一些更聪明的方法 - 调用编译器API和一些类加载魔法让我的系统类加载器看到它们.
我如何选择2)?
还有其他想法吗?
dma*_*tro 10
美: -
由于.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());
Run Code Online (Sandbox Code Playgroud)
和
package org.jboss.loom.migrators.mail;
import org.jboss.loom.tools.groovy.IFoo;
public class Foo implements IFoo {
public String foo(){
return "Foooooooooo Action!";
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11874 次 |
最近记录: |