cglib动态代理使用

来源:互联网 发布:电视猫软件安装 编辑:程序博客网 时间:2024/06/07 00:48

java实现动态代理有两种一种是jdk,cglib,jdk是基于接口的,cglib基于类的,为一个类创建子类,并在子类中采取拦截技术拦截所有父类的方法调用,实现案例有spring aop

案例:

父类:

public class Father{    public void test(){        System.out.println("I am Father.....");    }}

代理类:
通过传入父类的字节码生成子类,使用interceptor拦截所有的方法的调用,通过调用invokeSuper方法调用父类的方法

public class CglibProxy{    public Object proxy(){        Enhancer e = new Enhancer();        //将父类的class传入,生成子类        e.setSuperclass(Father.class);        //不使用缓存        e.setUseCache(false);        //拦截方法调用        e.setCallback(new MethodInterceptor(){            @Override            public Object intercept(Object arg0, Method arg1, Object[] arg2, MethodProxy arg3) throws Throwable {                // TODO Auto-generated method stub                System.out.println("invokeSuper before");                 Object obj = arg3.invokeSuper(arg0, arg2);                 System.out.println("invokeSuper after");                 return obj;            }        });        return  e.create();    }}

测试类:

public class Test{    public static void main(String[] args) {            CglibProxy  p = new CglibProxy();            Father f = (Father)p.proxy();    }}
原创粉丝点击