如何在Java运行时生成现有类的字节码?
我的现有班级是说Foo.java
public class Foo {
public String saySomething() {
return "Hello World";
}
}
现在,我想生成此现有类Foo.java
的字节码,并可能在其他JVM实例中使用它。请理解,因为我已经有一个名为Foo.java
的现有类,所以我不在运行时创建类。打开任何库,例如ASM或ByteBuddy等。
答案 0 :(得分:0)
[根据评论中的说明进行编辑]
following article介绍了如何使用ToolProvider.getSystemJavaCompiler()
在运行时从源代码编译类。
答案 1 :(得分:0)
您不需要库,任何类文件都只是资源,就像Foo.class.getResource("Foo.class")
可以找到的任何其他文件一样。您可以像打开其他资源一样打开此资源的流并读取其字节。
如果您已经在使用Byte Buddy,则可以通过ClassFileLocator.ForClassLoader.read(Foo.class)
来控制字节,但是如果您只需要使用字节库,那么使用库就太过头了。