初步探究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());
  }
}

后续完善···