实战CGLIB系列文章之开篇:CGLIB简介、原理与应用
来源:互联网 发布:石家庄seo公司seo9527 编辑:程序博客网 时间:2024/05/17 02:18
本系列文章均整理自我在先前一家公司的CGLIB使用总结和笔记。鉴于CGLIB文档及示例较少,因此分享出来,希望对看到的人有所帮助,同时欢迎大家提出宝贵意见。
------------------------------------
CGLIB介绍与原理(部分节选自网络)
一、什么是CGLIB?
CGLIB是一个功能强大,高性能的代码生成包。它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充。通常可以使用Java的动态代理创建代理,但当要代理的类没有实现接口或者为了更好的性能,CGLIB是一个好的选择。
关于Java动态代理,请参见我的另一篇文章:Java动态代理详解 http://shensy.iteye.com/blog/1698197
二、CGLIB原理
CGLIB原理:动态生成一个要代理类的子类,子类重写要代理的类的所有不是final的方法。在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。它比使用java反射的JDK动态代理要快。
CGLIB底层:使用字节码处理框架ASM,来转换字节码并生成新的类。不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉。
CGLIB缺点:对于final方法,无法进行代理。
三、CGLIB的应用
广泛的被许多AOP的框架使用,例如Spring AOP和dynaop。Hibernate使用CGLIB来代理单端single-ended(多对一和一对一)关联。
四、CGLIB的API
1、Jar包:
cglib-nodep-2.2.jar:使用nodep包不需要关联asm的jar包,jar包内部包含asm的类.
cglib-2.2.jar:使用此jar包需要关联asm的jar包,否则运行时报错.
2、CGLIB类库:
由于基本代码很少,学起来有一定的困难,主要是缺少文档和示例,这也是CGLIB的一个不足之处。
本系列使用的CGLIB版本是2.2。
net.sf.cglib.core:底层字节码处理类,他们大部分与ASM有关系。
net.sf.cglib.transform:编译期或运行期类和类文件的转换
net.sf.cglib.proxy:实现创建代理和方法拦截器的类
net.sf.cglib.reflect:实现快速反射和C#风格代理的类
net.sf.cglib.util:集合排序等工具类
net.sf.cglib.beans:JavaBean相关的工具类
本实战系列主要涉及的包:net.sf.cglib.proxy、net.sf.cglib.reflect、net.sf.cglib.util、net.sf.cglib.beans
下一篇将通过具体实例开始CGLIB实战!
- 实战CGLIB系列文章之开篇:CGLIB简介、原理与应用
- 实战CGLib系列文章 MethodInterceptor和Enhancer
- 实战CGLib系列之proxy篇
- Spring AOP 实现原理与 CGLIB 应用
- Spring AOP 实现原理与 CGLIB 应用
- Spring AOP 实现原理与 CGLIB 应用
- Spring AOP 实现原理与 CGLIB 应用
- Spring AOP 实现原理与CGLIB应用
- Spring AOP 实现原理与 CGLIB 应用
- 【spring aop】实现原理与 CGLIB 应用
- Spring AOP实现原理与CGLIB应用
- Spring AOP 实现原理与 CGLIB 应用
- Spring AOP 实现原理与CGLIB应用
- Spring AOP 实现原理与 CGLIB 应用
- Spring AOP 实现原理与 CGLIB 应用
- Spring AOP 实现原理与 CGLIB 应用
- Spring AOP 实现原理与 CGLIB 应用
- Spring AOP 实现原理与 CGLIB 应用
- 技术层面的假象—真金板并不是一种金属
- Android开源项目分类汇总(非常全面!!!!)
- HDU 5087 Revenge of LIS II(次长上升子序列)
- 1153 马的周游问题
- Editplus设置保存文件默认编码
- 实战CGLIB系列文章之开篇:CGLIB简介、原理与应用
- Linux
- 面试之站在面试官的角度去面试
- MySQL数据库引擎
- 自控力
- 实战CGLib系列之proxy篇(一):方法拦截MethodInterceptor
- 在VMWare如何调整虚拟磁盘大小
- 【Axure教程】团队中做原型设计的考虑
- uva 10051(最长上升子序列)