package com.mzsx.gclib;public class FunctionServerImp  {    public void creatdDoc(int count) {        System.out.println("创建了"+count+"对象。。。。。。。");    }    public void removeDoc(int count) {        System.out.println("***了"+count+"对象。。。。。。。");    }}

package com.mzsx.gclib;public class Porformant {    private long start;    private long end;    public  void start(){        System.out.println("执行start。。。。。");        start =System.currentTimeMillis();    }                   public void end(){        end=System.currentTimeMillis();        System.out.println("耗时"+(end-start)+"ms........");    }}

package com.mzsx.gclib;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 CGlibProxy implements MethodInterceptor {    private Enhancer enhancer=new Enhancer();    public Object getProxy(Class clazz){                      enhancer.setSuperclass(clazz);        enhancer.setCallback(this);        return enhancer.create();    }              @Override    public Object intercept(Object obj, Method method, Object[] arg,            MethodProxy proxy) throws Throwable {        Porformant porformant=new Porformant();        porformant.start();                      Object object=proxy.invokeSuper(obj, arg);        porformant.end();                      return object;    }          }

package com.mzsx.gclib;public class CGlibTest {    public static void main(String[] args) {        CGlibProxy cGlibProxy=new CGlibProxy();        FunctionServerImp functionServerImp=(FunctionServerImp)cGlibProxy.getProxy(FunctionServerImp.class);        functionServerImp.creatdDoc(10);        functionServerImp.removeDoc(20);    }      }

对比JDK的AOP与CGlib的AOP:

1、JDK的AOP的proxy需要依赖与接口,而CGLib的APO不需要依赖接口;

2、JDK的AOP生成实例速度快,但是执行效率慢,CGLib刚好相反,是生成实例慢,执行效率快;

3、CGLIB是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法
   因为是继承,所以该类或方法最好不要声明成final 

动态代理的本质:

       用来实现对目标对象进行增强,最终表现为类,只不过是动态创建子类,不用手工生成子类。

动态代理的限制:

       只能在父类方法被调用之前或之后进行增强(功能的修改),不能在中间进行修改,要想在方法调用中增强,需要ASM(一个Java 字节码操作和分析框架)