繁体   English   中英

在运行时从Java编译和使用Groovy类?

[英]Compiling and using Groovy classes from Java at runtime?

我有一个应用程序,我希望通过让用户在Groovy中定义类,最终实现一些接口来实现可扩展性。

关键方面是应该在运行时解释/编译它。 即我需要我的应用程序来获取.groovy并编译它。 在启动过程中这样做是可以的。

然后,当然,我的应用程序应该能够实例化该类。

我看到两个解决方案:

1)在应用程序运行时编译,将类放在类路径上的某个位置,然后只加载类,假装它们始终存在。

2)一些更聪明的方法 - 调用编译器API和一些类加载魔法让我的系统类加载器看到它们。

我如何选择2)?
还有其他想法吗?

看看将Groovy集成到应用程序中

  • 获取类加载器
  • 加载类
  • 实例化类。

美女 : -
由于.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM