CGLIB --操作字节码
来源:互联网 发布:c foreach 遍历数组 编辑:程序博客网 时间:2024/06/05 01:18
CGLIB包的介绍 (来自百度百科)
代理为控制要访问的目标对象提供了一种途径。当访问对象时,它引入了一个间接的层。JDK自从1.3版本开始,就引入了动态代理,并且经常被用来动态地创建代理。JDK的动态代理用起来非常简单,但它有一个限制,就是使用动态代理的对象必须实现一个或多个接口。如果想代理没有实现接口的继承的类,该怎么办?现在我们可以使用CGLIB包
CGLIB是一个强大的高性能的代码生成包。
它广泛的被许多AOP的框架使用,例如Spring AOP和dynaop,为他们提供方法的interception(拦截)。最流行的OR Mapping工具hibernate也使用CGLIB来代理单端single-ended(多对一和一对一)关联(对集合的延迟抓取,是采用其他机制实现的)。EasyMock和jMock是通过使用模仿(moke)对象来测试java代码的包。它们都通过使用CGLIB来为那些没有接口的类创建模仿(moke)对象。
它广泛的被许多AOP的框架使用,例如Spring AOP和dynaop,为他们提供方法的interception(拦截)。最流行的OR Mapping工具hibernate也使用CGLIB来代理单端single-ended(多对一和一对一)关联(对集合的延迟抓取,是采用其他机制实现的)。EasyMock和jMock是通过使用模仿(moke)对象来测试java代码的包。它们都通过使用CGLIB来为那些没有接口的类创建模仿(moke)对象。
CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类。除了CGLIB包,脚本语言例如Groovy和BeanShell,也是使用ASM来生成java的字节码。当然不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉。
实例:
输出:
Before invoke
invokinginginginging....
After invoke
Before invoke
After invoke
Before invoke
invokinginginginging....
After invoke
实例:
package reflect;import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net.sf.cglib.proxy.MethodInterceptor;import net.sf.cglib.proxy.MethodProxy;public class Cglib { public static void main(String ss[]) { test(); } static void test() { while (true) { Enhancer e = new Enhancer(); e.setSuperclass(OOMObject.class);// 要生成OOMObject类的子类 e.setUseCache(false); e.setCallback(new MethodInterceptor() {// 设置callback,对原有对象的调用全部转为调用<span // MethodInterceptor的intercept方法 public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable { System.out.println("Before invoke "); Object result = proxy.invokeSuper(obj, args); System.out.println("After invoke"); return result; } }); OOMObject ee = (OOMObject) e.create(); ee.test(); } } static class OOMObject { public void test() { System.out.println("invokinginginginging...."); } }}
输出:
Before invoke
invokinginginginging....
After invoke
Before invoke
After invoke
Before invoke
invokinginginginging....
After invoke
0 0
- CGLIB --操作字节码
- Cglib 字节码加强试用
- spring中CGLIB代理(CGLIB字节码)
- Spring(九)CGLIB字节码增强
- spring AOP动态代理和CGLIB字节码生成
- Spring---->JDK动态代理和CGLIB字节码生成
- Spring AOP,基于动态代理和字节码(CGLIB)区别
- spring中的Cglib字节码增强实现AOP
- java字节码操作
- Javassist 字节码操作
- Javassist 字节码操作
- Java字节码操作
- JAVAasist操作字节码
- 字节码操作 javaassist
- CGLIB依赖ASM(关于java字节码框架ASM的学习)
- java-动态代理-jdk代理、cglib代理、生成字节码文件.
- 字节码操作(ObjectWeb ASM)
- 字节码操作库Javassist
- iOS第三方开源库的吐槽和备忘
- (NIDS)网络入侵检测函数接口说明
- matlab 初学
- Struts2 Action中传List值到jsp页面
- 设置SQLSERVER的混合身份验证模式(SA账号)
- CGLIB --操作字节码
- 试听广州传智播客.Net课程培训,我做决定了!
- 认识(大端--小端)端模式
- 关于Android的多种屏幕适配
- openstack 命令行管理一 - br-ex 网络设定 (备忘)
- int转换成指定位数string,不足位数前面补0
- LVS原理详解
- Action<T> Delegate 使用
- 教你如何快速成为一个SEOer