跳到主要内容

吃透Spring源码(十九):CGLIB动态代理创建过程

CGLIB(Code Generation Library)是一个开源项目!是一个强大的,高性能,高质量的Code生成类库,它可以在运行期扩展Java类与实现Java接口。

CGLIB是一个强大的高性能的代码生成包。它广泛的被许多AOP的框架使用,例如Spring AOP为他们提供方法的interception(拦截)。CGLIB包的底层是通过使用一个小而快的字节码处理框架ASM,来转换字节码并生成新的类。除了CGLIB包,脚本语言例如Groovy和BeanShell,也是使用ASM来生成java的字节码。当然不鼓励直接使用ASM,因为它要求你必须对JVM内部结构包括class文件的格式和指令集都很熟悉。

一,例子准备

MyCalculator.java

public class MyCalculator {


public int add(int i, int j) {


int result = i + j;
return result;
}

public int sub(int i, int j) {


int result = i - j;
return result;
}

public int mult(int i, int j) {


int result = i * j;
return result;
}

public int div(int i, int j) {


int result = i / j;
return result;
}
}

MyCglib.java

public class MyCglib implements MethodInterceptor {


@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {


Object o1 = methodProxy.invokeSuper(o, objects);
return o1;
}
}