2010-04-29 105 views
15

在Java中,是否有一种方法(在运行时)获取定义特定类的字节码?有没有办法在运行时获取类的字节码?

换句话说,有一种方法可以在加载某个特定的类时获取传递给ClassLoader.defineClass(String name, byte[] b, int off, int len)byte[]数组吗?我发现这种方法被宣布为final,所以创建一个自定义的ClassLoader来拦截类定义似乎是不可能的。

在过去,我使用该类的ClassLoader通过getResourceAsStream(String)方法获得字节码,但我更喜欢更典型的解决方案。

+0

为什么getResourceAsStream(String)不规范? – Riduidel 2010-04-29 12:39:47

+2

@Riduidel:并非所有的类加载器都将字节码作为资源来公开。例如,一些自定义类加载器可以即时生成字节码*,并且在调用getResourceAsStream时不会返回它。 – 2010-04-29 12:41:26

+0

这可能是一个愚蠢的问题,但为什么你需要获得给定类的字节码?假设你不想使用getResourceAsStream,因为有些类可能被另一个类加载器加载了? – Geoff 2010-04-29 13:29:56

回答

5

“Java代理”将是显而易见的解决方案。

+0

有趣的是,我从来没有听说过代理商! – 2010-04-29 12:45:35

相关问题