强大的CGLIB
来源: BlogBus 原始链接: http://agilejava.blogbus.com:80/logs/2004/04/156146.html 存档链接: https://web.archive.org/web/20060111223234id_/http://agilejava.blogbus.com:80/logs/2004/04/156146.html
agilejava.blogbus.com agile & sungny TRACKS The next stop is ... NEW ENTRIS LAST COMMENTS ARCHIVES LINKS Blogbus.com © 2002-2005 << 让我兴奋的Hibernate | TOP | 用 BCEL 设计字节码 >> 强大的CGLIB 昨天晚上看了看cglib的实现,感觉真是强,直接生成class,直接用JVM的字节码来实现我们平时看到的语句,为了弄清这一点,我不得不把它生成的class写放一个文件中,再用DJ反编译,才对它的机制有了一个初步的理解。下午可能会有新活儿,所以不得不先放一下了。实在是佩服作者对JVM的了解,向作者致敬:) 与JDK的PROXY机制相比,后者要求有接口才行,这也难怪HIBERNATE使用CGLIB了,理由很明显pojo不应该被强制实现某个接口。 今天晚上的计划--看<Linux内核源代码情景分析>,一工作就好久没看了,才看到第四章,今天无论无何也要开始坚持下去了。 POSTED BY agilejava AT 12:47 KEYWORDS java技术 TRACKBACK_0 | EDIT ENTRY COMMENTS 很感谢你的解释,可以和你做个友情连接吗? 你的我已经做好了 POSTED BY zcw ( www.zblog.org ) AT 2004-09-11 23:24 有些地方我不大明白,请指教: “与JDK的PROXY机制相比,后者要求有接口才行,这也难怪HIBERNATE使用CGLIB了,理由很明显pojo不应该被强制实现某个接口。” 我觉得POJO可以用JDK对po类(不需要接口)t通过反射来创建啊,为什么要用proxy呢? 能解释一下吗? agilejava 回复 zcw 说: 在使用Hiberate时,需要对我们的POJO对象,进行代码增强,也就是动态的生成代码,"插入"到POJO中,比如在Hiberante中,对象的延迟加载就是通过代码增强实现的,还有就是它的属性的读写也可以通过代码增强实现,按理来说可以避免反射的开销。同时,Hibernate结合使用了反射和CGLIB,我在BLOG的说法错了,抱谦,以上只是我的一些看法,好久没动这些东西,可能会有遗漏,一起研究:) (2004-09-10 22:23) POSTED BY zcw ( www.zblog.org ) AT 2004-09-09 16:03 to dreamhead,以我的水平来说,写研究心得还差点儿:)不过你可以看看这个http://www-900.ibm.com/developerWorks/cn/java/j-dyn0414/index.shtml 它更好的讲解了字节码的生成方式,与CGLIB差不多,虽然CGLIB使用了ASM。 POSTED BY agile ( agilejava.blgobus.com ) AT 2004-04-29 16:40 我对cglib也比较感兴趣,能否把你的研究心得总结一下,分享出来。 POSTED BY dreamhead ( dreamhead.blogbus.com ) AT 2004-04-29 08:48 ADD COMMENTS