拦截方法调用

m0s*_*it0 14 java reflection android

我有这个代码

Foo foo = new Foo();
foo.callTheMethod();
Run Code Online (Sandbox Code Playgroud)

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

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

Bri*_*ian 26

使用Java的Proxy类.它反而创建了接口和截取方法的动态实现.

这是一个教程.

  • +1给出没有外部依赖的答案 (5认同)
  • 是的,我已经寻找过“Proxy”,但在我看到的所有示例中,您都必须使用“Proxy”对象创建实例(例如“Foo”实例)。就我而言,这是不可接受的。我无法修改上面显示的示例代码。 (2认同)

Bri*_*new 11

您是否考虑过面向方面编程以及AspectJ?有关AspectJ/Android信息,请参阅此处此处.


Bha*_*kar 5

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