温故了一个cglib和asm,找到几篇写得比较好,介绍得比较清楚的文章:
1、CGlib简单介绍,访问地址:http://www.blogjava.net/stone2083/archive/2008/03/16/186615.html,从简单的示例到不同业务场景的变化,一步步让读者明白,为什么要使用cglib以及哪种场景下需要使用cglib;
2、cglib源码学习交流,访问地址:http://www.iteye.com/topic/799827,作者agapple的cglib源码阅读记录,有对和个类的介绍说明,也有部分示例;
3、cglib相关性能测试对比,访问地址:http://www.iteye.com/topic/801577,也是agapple写的,其中需要关注的就是作者提到的BeanCopier与BeanUtils做copy的时候的性能差异很大;
4、AOP 的利器:ASM 3.0 介绍,访问地址:http://www.ibm.com/developerworks/cn/java/j-lo-asm30/,虽然是写字节码的,但是读下来不会让人感到枯燥,作者先以示例为铺垫,一步步的深入,并比较了示例在现有的逻辑基础之上增加验权的的几种实现方式。其中有介绍使用装饰模式(Decorator),指出了使用装饰模式的可能代码改动量比较大的问题;使用Proxy方式,不过这种方式可能会有性能问题;最终才引出ASM,指出asm是直接生成class类的方式,不会有性能问题,以下两句话可以说明:
Proxy 毕竟是通过反射实现的,必须在效率上付出代价:有实验数据表明,调用反射比一般的函数开销至少要大 10 倍。而且,从程序实现上可以看出,对 proxy class 的所有方法调用都要通过使用反射的 invoke 方法。因此,对于性能关键的应用,使用 proxy class 是需要精心考虑的,以避免反射成为整个应用的瓶颈。
ASM 能够通过改造既有类,直接生成需要的代码。增强的代码是硬编码在新生成的类文件内部的,没有反射带来性能上的付出。同时,ASM 与 Proxy 编程不同,不需要为增强代码而新定义一个接口,生成的代码可以覆盖原来的类,或者是原始类的子类。它是一个普通的 Java 类而不是 proxy 类,甚至可以在应用程序的类框架中拥有自己的位置,派生自己的子类。
分享到:
相关推荐
cglib.jar和asm.jar .
在练习代理模式的时候,使用cglib时总是会出现cglib和asm的jar包不匹配的问题。这时候控制台会报错。如果单独找包,不容易匹配。这套jar包是自己试验过的。
cglib-2.2.2.jar和asm-3.3.jar,使用Cglib需要的jar包。
cglib需要用到的动态代理jar包。贡献出来.
开发基于CGLib的动态代理应用所需的jar吧,包括CGLib和ASM。因为CGLib是基于ASM的,所以开发CGLib的应用不可没有ASM相关的jar包.
兼容性好的CGLIB和 ASM,欢迎下载
cglib包及依赖汉cglib3.1和asm4.2,主要作用是用户代理,代理为控制要访问的目标对象提供了一种途径。当访问对象时,它引入了一个间接的层。JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理。...
jdk动态代理是由Java内部的反射机制来实现的,cglib动态代理底层则是借助asm来实现的。总的来说,反射机制在生成类的过程中比较高效,而asm在生成类之后的相关执行过程中比较高效(可以通过将asm生成的类进行缓存,...
cglib.jar 和 asm.jar 对应版本
CGLIB和ASM的jar包
里面包含完整的cglib-nodep-2.2.jar和asm-2.2.3.jar,放心下载
这压缩包里面有asm-5.2.jar、cglib-3.2.5.jar、cglib-3.2.5-sources.jar,是编译cglib代理的库文件
cglib代理,若代理过程中报java.lang.ClassNotFoundException: org.objectweb.asm.Type错说明缺少该jar包
Cglib所需的库。这压缩包里面是cglib_3.2.5.jar和asm_5.2.jar。有需要的可以下载
因为在cglib简单使用的时候,和asm因为兼容问题运行老是失败。比如提示java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.(I)V 之类的乱七八糟的错误。最后通过使用正确的配套的版本使得程序成功运行。
cglib.jar和asm.jar................................
cglib2.2.2.jar和asm3.3.1.jar
不导入asm.jar会出现Caused by: java.lang.ClassNotFoundException: org.objectweb.asm.Type报错,参考文章: http://blog.csdn.net/xujingcheng123/article/details/79030216
免费下载Cglib.jar 和asm.jar,杜绝赚分的人