栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java Cglib 动态代理intercept的参数含义

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java Cglib 动态代理intercept的参数含义

如何使用CGLIB创建动态代理,网上已经有很多资料,这里就不再赘述。

直接说结论。

当我们使用自定义类

private static class MethodInterceptorImpl implements MethodInterceptor {
    private  Object  target;
    public MethodInterceptorImpl(Object  object){
        this.target= object;
    }
    @Override
    public Object intercept(Object obj, Method method, Object[] args,MethodProxy proxyMethod) throws Throwable {
        proxyMethod 和  obj
       1、method.invoke(obj) 

       2、method.invoke(target)

       3、proxyMethod.invoke(obj)

       4、proxyMethod.invokeSuper(obj)

       5、proxyMethod.invoke(target)

       6、proxyMethod.invokeSuper(target)
    }
}

这里主要讲proxyMethod 和 obj 使用方式。有以下几种调用情况:

obj是cglib创建的代理对象,target是动态代理的被代理对象,我们生成之前的一般会传入进来的对象

1、method.invoke(obj) 

2、method.invoke(target)

3、proxyMethod.invoke(obj)

4、proxyMethod.invokeSuper(obj)

5、proxyMethod.invoke(target)

6、proxyMethod.invokeSuper(target)

结论是:

2、4、5 可以执行成功。

1、3 死循环stack overflow,6类型转换错误。

原因:

cglib可以理解为继承子类的方式创建动态代理,那么我们可以理解为 target 是父类,obj 是动态代理生成的子类。

proxyMethod.invoke方法是调用被代理对象(父类)方法,所以入参只能传入 target  ;传入 代理对象 obj 就会死循环。

proxyMethod.invokeSuper方法是调用 代理对象的 方法,入参只能传入 obj ; 传入 target,会报类型错误。

同理,method本来就是父类的方法,所以入参只能传入 target  。传入 代理对象 obj 就会死循环。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/874388.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号