CGLIB是用于实现代理机制的非常流行的实现。我很想知道,代理一个特定的类CGLIB创建一个内存实现它的子类,或者它创建物理字节码然后实例化该类?
如果它在内存实现中创建,那么这样做会带来多少开销。我试图在CGLIB文档中找到这些细节,但它没有指定它或者可能已被我跳过。
可能是同一个问题可以请求javaassist库。
答案 0 :(得分: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