我对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调用?
感谢。
答案 0 :(得分:1)
内部类只不过是用于定义两个类的语法糖,在这种情况下,一个类名为Abc
,一个名为Abc$Def
。要代理Def
类的method2
,您需要像Abc
类一样代理它。
我假设你正在Def
类中的某个地方创建一个Abc
实例,并希望代理creared实例的方法。在这种情况下,在Abc
内创建一个factroy方法,并检测工厂方法以返回Def
的代理。