如何在Java运行时生成现有类的字节码?

时间:2018-10-18 05:55:46

标签: java byte-buddy

如何在Java运行时生成现有类的字节码?

我的现有班级是说Foo.java

public class Foo {

    public String saySomething() {
        return "Hello World";
    }
}

现在,我想生成此现有类Foo.java的字节码,并可能在其他JVM实例中使用它。请理解,因为我已经有一个名为Foo.java的现有类,所以我不在运行时创建类。打开任何库,例如ASM或ByteBuddy等。

2 个答案:

答案 0 :(得分:0)

[根据评论中的说明进行编辑]

following article介绍了如何使用ToolProvider.getSystemJavaCompiler()在运行时从源代码编译类。

答案 1 :(得分:0)

您不需要库,任何类文件都只是资源,就像Foo.class.getResource("Foo.class")可以找到的任何其他文件一样。您可以像打开其他资源一样打开此资源的流并读取其字节。

如果您已经在使用Byte Buddy,则可以通过ClassFileLocator.ForClassLoader.read(Foo.class)来控制字节,但是如果您只需要使用字节库,那么使用库就太过头了。