在Java中,是否有一种方法(在运行时)获取定义特定类的字节码?有没有办法在运行时获取类的字节码?
换句话说,有一种方法可以在加载某个特定的类时获取传递给ClassLoader.defineClass(String name, byte[] b, int off, int len)
的byte[]
数组吗?我发现这种方法被宣布为final
,所以创建一个自定义的ClassLoader
来拦截类定义似乎是不可能的。
在过去,我使用该类的ClassLoader
通过getResourceAsStream(String)
方法获得字节码,但我更喜欢更典型的解决方案。
为什么
getResourceAsStream(String)
不规范? – Riduidel 2010-04-29 12:39:47@Riduidel:并非所有的类加载器都将字节码作为资源来公开。例如,一些自定义类加载器可以即时生成字节码*,并且在调用getResourceAsStream时不会返回它。 – 2010-04-29 12:41:26
这可能是一个愚蠢的问题,但为什么你需要获得给定类的字节码?假设你不想使用getResourceAsStream,因为有些类可能被另一个类加载器加载了? – Geoff 2010-04-29 13:29:56