Javassist和命名的内部类

时间:2014-12-05 12:50:47

标签: java proxy javassist

我对javassist有点问题,用methodhandler装饰一个类。问题是方法处理程序在Abc类中与method1一起正常工作,但是不拦截对Def内部类中的method2的调用。

public class Abc {

  Def def;

  public Abc() {
    this.def = new Def();
  }

  public void method1() {}

  public static class Def {

    public void method2() {}
  }
}

简单的javassist处理

ProxyFactory factory = new ProxyFactory();
factory.setSuperclass(Abc);
Class<?> clazz = factory.createClass();
MethodHandler handler = new MethodHandler() {

  @Override
  public Object invoke(final Object self, final Method overridden, final Method forwarder, final Object[] args)
      throws Throwable {
    ...
  }
};
ProxyObject instance = (ProxyObject) clazz.newInstance();
instance.setHandler(handler);
return (Abc) instance;

如何使我的处理程序方法同时捕获method2调用?

感谢。

1 个答案:

答案 0 :(得分:1)

内部类只不过是用于定义两个类的语法糖,在这种情况下,一个类名为Abc,一个名为Abc$Def。要代理Def类的method2,您需要像Abc类一样代理它。

我假设你正在Def类中的某个地方创建一个Abc实例,并希望代理creared实例的方法。在这种情况下,在Abc内创建一个factroy方法,并检测工厂方法以返回Def的代理。