Java 有没有办法在运行时获取类的字节码?
在Java中,是否有方法(在运行时)获取定义特定类的字节码 换句话说,当加载特定类时,是否有方法获取传递给类加载器的Java 有没有办法在运行时获取类的字节码?,java,runtime,bytecode,Java,Runtime,Bytecode,在Java中,是否有方法(在运行时)获取定义特定类的字节码 换句话说,当加载特定类时,是否有方法获取传递给类加载器的字节[]数组。defineClass(字符串名,字节[]b,int off,int len)?我看到这个方法被声明为final,所以创建一个自定义类加载器来截取类定义似乎是不可能的 过去,我使用类的ClassLoader通过getResourceAsStream(String)方法获取字节码,但我更喜欢更规范的解决方案。“Java代理”将是显而易见的解决方案。描述了如何实现代理ge
字节[]
数组。defineClass(字符串名,字节[]b,int off,int len)?我看到这个方法被声明为final
,所以创建一个自定义类加载器来截取类定义似乎是不可能的
过去,我使用类的ClassLoader
通过getResourceAsStream(String)
方法获取字节码,但我更喜欢更规范的解决方案。“Java代理”将是显而易见的解决方案。描述了如何实现代理getResourceAsStream(String)的原因
not canonical?@Riduidel:并非所有类加载器都将字节码作为资源公开。例如,一些自定义类加载器会动态生成字节码,在调用getResourceAsStream
时不会返回字节码。这可能是一个愚蠢的问题,但为什么需要获取给定类的字节码?您可能不想使用getResourceAsStream,因为某些类可能由另一个类加载器加载?@Geoff:我实际上希望调试符号有助于在运行时根据以下问题推断方法参数名称:@Geoff:过去,我使用该类的类加载器(与当前线程的类加载器或系统类加载器相反)以增加查找字节码的几率。有趣的是,我以前从未听说过代理!