首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混淆Cglib MethodInterceptor调用方法

混淆Cglib MethodInterceptor调用方法
EN

Stack Overflow用户
提问于 2013-01-20 11:30:32
回答 1查看 1.5K关注 0票数 2

我对Cglib MethodInterceptor有一些困惑,正如文档中所描述的:所有生成的代理方法都调用这个方法,而不是原始方法。原始方法可以通过使用method对象的普通反射调用,也可以使用MethodProxy (更快)调用。

但是下面的代码有由java.lang.reflect.InvocationTargetException;why?引起的错误任何建议都将不胜感激。

代码语言:javascript
复制
public class CglibInterceptor implements MethodInterceptor {
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
    System.out.println(" CglibInterceptor do something");
    return method.invoke(obj, args);

}

}

EN

回答 1

Stack Overflow用户

发布于 2013-12-02 07:29:30

您发布的代码创建了一个无限循环。使用普通反射和MethodProxy的不同之处在于,MethodProxy将调用被代理类的子类实现,而反射调用将再次被代理。

您可以按如下方式考虑这两个选项:

代码语言:javascript
复制
 class NormalClass {
   void m() { }
 }

 class CglibClass extends NormalClass {
   void m() {
     // This would be like the reflective invocation
     this.m();
     // This has the same effect as the MethodProxy
     super.m();
   }
 }

问题是反射调用是动态绑定的。因此,它们将始终命中代理,而代理只不过是一个动态创建的子类。选择两个调用选项中的一个与速度无关,它关系到您是否想要命中代理。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14421421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档