0
我有声明某一类Groovy脚本。我可以通过javassist在同一个脚本中访问这个类吗?我需要为它创建一个CtClass对象。可以在javassist中访问Groovy脚本中声明的类吗?
这里是脚本,test.groovy的例子:
import javassist.*;
public class TestClass {
public String testMethod(String x) {
return x + ".";
}
}
// I can use TestClass now for ordinary operations
TestClass obj = new TestClass();
println(obj.testMethod("a"));
ClassPool pool = ClassPool.getDefault(); // ?
CtClass cc = pool.getCtClass("TestClass"); // this doesn't work
最后的字符串将导致错误:
Caught: javassist.NotFoundException: TestClass
javassist.NotFoundException: TestClass
at javassist.ClassPool.get(ClassPool.java:450)
at javassist.ClassPool.getCtClass(ClassPool.java:515)
at javassist.ClassPool$getCtClass$0.call(Unknown Source)
at test.run(test.groovy:14)
这当然有可能推动这一类的脚本之外,将其编译为.class文件,然后轻松加载它。我认为它也可以在脚本中,也就是说,动态重新编译这个类的字节数组或一个.class文件,然后将其加载在了Javassist。但有可能做到这一点没有这个类的额外的(再)汇编和使用,我已经可以在普通操作访问类?