簡體   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