20

我有这个代码

Foo foo = new Foo();
foo.callTheMethod();

有什么方法可以在Foo.callTheMethod()没有子类化或修改Foo类且没有Foo工厂的情况下拦截调用?

编辑:抱歉忘了提到这是在 Android 平台上。

4

4 回答 4

29

使用 Java 的Proxy类。它创建接口的动态实现并拦截方法,所有这些都是反射式的。

这是一个教程

于 2012-09-11T14:42:15.107 回答
13

您是否考虑过面向方面的编程,也许还有AspectJ?有关 AspectJ/Android 信息,请参见此处此处

于 2012-09-11T14:40:08.040 回答
4

看看Spring AOP。您不必手动子类化您的类 - 但 Spring 将在幕后生成它们并添加代码来进行拦截。

于 2012-09-11T14:40:33.860 回答
4

是的,通过AspectJ是可能的。我将用一些代码片段来解释它:

public Aspect
{
    Object around()call(* Foo.callTheMethod())
    {
        // do your work
        return proceed(); 
    }                       
}
于 2014-05-30T07:15:20.070 回答