cglib 是否在内存中创建字节码或物理类来实现代理



CGLIB是非常流行的实现,用于实现代理机制。我很想知道,要代理特定类 CGLIB 会创建其子类的内存实现,或者它创建物理字节码然后实例化该类?

如果它在内存实现中创建,那么这样做会带来多少开销。我试图在 CGLIB 文档中找到这些细节,但它没有指定它或可能被我跳过了。

可能同样的问题可以问javaassist库。

首先,cglib 提供了完全不同的类,这些类彼此完全独立。

然而,据

我所知,截至今天,cglib 通过使用 ASM 读取类的字节码并通过 ASM ClassGuest 等"动态"操作它来创建内存中的类。也就是说,cglib 使用 ASM 的访问者 API,而不是其内存密集型树 API。然后直接加载生成的类。这是关于字节检测的速度。

基本上,cglib 可以做 ASM 能做的一切。 ASM 有很好的文档记录: http://download.forge.objectweb.org/asm/asm4-guide.pdf

如果你有兴趣,我在这里写了一个关于cglib的摘要:http://mydailyjava.blogspot.no/2013/11/cglib-missing-manual.html

最新更新