美文网首页
cglib动态代理

cglib动态代理

作者: tracy_668 | 来源:发表于2018-03-30 10:36 被阅读24次

    概述

        cglib是一个优秀的动态代理框架,它底层通过asm在内存中动态地生成被代理类的子类,我们先来看一下cglib框架的架构。

            动态代理?jdk不是给我们提供了吗?为什么还需要cglib? 一个重要的原因是jdk动态代理不能完成对没有实现接口的类的代理,但cglib可以,本质上,对于需要被代理的类,它只是动态生成一个子类来覆盖非final方法,同时回调自定义的拦截器。

    cglib的核心类:

          Enhancer: 主要的增强类

          MethodProxy JDK的java.lang.reflect.Method类的代理类,可以方便地实现对源对象方法的调用。

          MethodInterceptor:主要的方法拦截类,它是Callback接口的子接口,这个接口只定义了一个方法,public Object intercept(Object object, java.lang.reflect.Method method,Object[] args, MethodProxy proxy) throws Throwable;当调用代理方法时,它会先调用该方法,再调用被代理对象的方法,其第一个参数为代理对象,第二个、第三个参数分别为被拦截的方法以及方法参数。

           MethodInterceptor满足了所有的代理需求,但对于某些特定场景它使用起来不太方便,为了提高性能和方便,cglib提供了一些特殊的回调类型。比如NoOp直接透传到父类的方法实现。

    这里笔者有疑惑的是idea下debug和run出现不同的结果,debug下的结果如下

    相关文章

      网友评论

          本文标题:cglib动态代理

          本文链接:https://www.haomeiwen.com/subject/svxvcftx.html