初步探究cglib动态代理的原理
之前我们说了一下jdk动态代理的原理 http://www.jiajiajia.club/weblog/blog/artical/60
本章说一下cglib动态代理,做个笔记
1.按照国际惯例,先来个HelloWorld
package cglib;
import java.lang.reflect.Method;
import net.sf.cglib.core.DebuggingClassWriter;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
/**
* *受理类
* @author Administrator
*
*/
class Target{
public void f(){
System.out.println("Target f()");
}
public void g(){
System.out.println("Target g()");
}
}
/**
* *方法拦截器
* @author Administrator
*
*/
class Interceptor implements MethodInterceptor {
@Override
public Object intercept(Object obj, Method method, Object[] args,MethodProxy proxy) throws Throwable {
System.out.println("before");//目标方法执行前
proxy.invokeSuper(obj, args);//调用目标类的方法
System.out.println("after");//目标方法执行后
return null;
}
}
/**
* 测试
* @author Administrator
*/
public class MainTest {
public static void main(String[] args) {
System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "E:\\test\\cglib");
Enhancer eh = new Enhancer();//实例化一个增强器,也就是cglib中的一个class generator
eh.setSuperclass(Target.class);//设置目标类
eh.setCallback(new Interceptor());// 设置拦截对象
Target t = (Target) eh.create();// 生成代理类并返回一个实例
t.f();
t.g();
System.out.println("t对象的父类:"+t.getClass().getSuperclass().getName());
}
}

后续完善···