2014-12-05 63 views
1

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

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; 

我怎样才能让我的处理方法也赶上方法2调用?

谢谢。

回答

1

内部类只是定义两个类的语法糖,其中一个名为Abc,另一个名为Abc$Def。为了代理Def类的method2,您需要像Abc类一样代理它。

我假设你在Abc类的某处创建了一个Def实例,并且想要代理creared实例的方法。在这种情况下,请在Abc中创建一个factroy方法,并使用工厂方法返回代理Def