1

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

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

对于 javaassist 库,可能会问同样的问题。

4

1 回答 1

1

嗯,首先,cglib 提供了完全独立的完全不同的类。

但是,据我所知,截至今天,cglib 通过使用 ASM 读取类的字节码并通过 ASM ClassVisitor 等“动态”操作它来在内存中创建类。也就是说,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

于 2013-11-13T22:48:39.620 回答