Maxwell Mao 2022-02-17 16:39 采纳率: 100%
浏览 51
已结题

为什么cglib代理类调用intercept方法的时候会陷入死循环导致内存溢出?

问题遇到的现象和发生背景

当我在自定义代理类是陷入了死循环

操作环境、软件版本等信息

//设置绑定关系
public Object newProxyInstance(Object targetObject) {
this.targetObject = targetObject;

    Enhancer enhancer = new Enhancer();
    //设置代理类的父类(目标类)
    enhancer.setSuperclass(this.targetObject.getClass());
    //设置回调函数
    enhancer.setCallback(this);
    //创建子类(代理类)
    return enhancer.create();
}

@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {

    Object result = null;

    try {
        System.out.println("通过Cglib动态代理" + method.getName() + "打印日志 begin");

        result = method.invoke(o, objects);

        System.out.println("通过Cglib动态代理" + method.getName() + "打印日志 end");
    } catch (Throwable e) {
        e.printStackTrace();
    }

    return result;
}
尝试过的解决方法
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • a1767028198 2022-02-17 17:03
    关注

    假设现在你有个a方法,生成代理对象后,调用代理对象的a方法,此时进入拦截类里面,然后你又通过反射去调用代理类的a方法,套娃形成,
    你不是自己丢进来targetObject了嘛,o换成targetObject,就不套娃了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月11日
  • 已采纳回答 4月3日
  • 创建了问题 2月17日

悬赏问题

  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 R语言卸载之后无法重装,显示电脑存在下载某些较大二进制文件行为,怎么办
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?
  • ¥15 关于#vue.js#的问题:修改用户信息功能图片无法回显,数据库中只存了一张图片(相关搜索:字符串)
  • ¥15 texstudio的问题,