为了账号安全,请及时绑定邮箱和手机立即绑定

关于CglibProxy的问题

在CglibProxy类中的intercept方法中,proxy.invokeSuper(obj, args);这样调用没有问题,但是用proxy.invoke(obj, args);就会报错,为什么呢?调用父类的方法,没有问题,调用自己的问什么会出错呢?

正在回答

2 回答

我们看一下示例中的代码:

/**
  * 拦截所有目标类方法的调用
  * obj  目标类的实例
  * m   目标方法的反射对象
  * args  方法的参数
  * proxy代理类的实例
  */
 @Override
 public Object intercept(Object obj, Method m, Object[] args,
   MethodProxy proxy) throws Throwable {
  System.out.println("日志开始...");
  //代理类调用父类的方法
  proxy.invokeSuper(obj, args);
  System.out.println("日志结束...");
  return null;
 }

 

intercept()方法拦截所有目标类方法的调用,如果调用proxy.invoke(obj, args);

会报java.lang.StackOverflowError异常,原因是将代理类作为目标类,这样会无限循环调用intercept方法,

导致无限死循环;二代理类的父类只有一个,调用父类的方法只会调用一次。

3 回复 有任何疑惑可以回复我~

谢谢老师的解答,明白了原理。非常感谢。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

关于CglibProxy的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信