Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 拦截方法调用_Java_Android_Reflection - Fatal编程技术网

Java 拦截方法调用

Java 拦截方法调用,java,android,reflection,Java,Android,Reflection,我有这个密码 Foo foo = new Foo(); foo.callTheMethod(); 是否有任何方法可以拦截Foo.callTheMethod()调用,而无需子类化或修改Foo类,也无需Foo工厂 编辑:抱歉忘了提到这是在Android平台上。你考虑过了吗?有关AspectJ/Android信息,请参阅和。请查看。您不必手动对类进行子类化,但是Spring将在幕后生成它们,并添加代码来执行拦截。使用Java的类。它创建接口的动态实现并拦截方法,所有这些都是反射式的 这是一个。是的,

我有这个密码

Foo foo = new Foo();
foo.callTheMethod();
是否有任何方法可以拦截
Foo.callTheMethod()
调用,而无需子类化或修改
Foo
类,也无需
Foo
工厂

编辑:抱歉忘了提到这是在Android平台上。你考虑过了吗?有关AspectJ/Android信息,请参阅和。

请查看。您不必手动对类进行子类化,但是Spring将在幕后生成它们,并添加代码来执行拦截。

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


这是一个。

是的,可以通过。我将用一些代码片段对此进行解释:

public Aspect
{
    Object around()call(* Foo.callTheMethod())
    {
        // do your work
        return proceed(); 
    }                       
}

是的,我已经查找了
代理
,但是在我看到的所有示例中,您都必须使用
代理
对象创建实例(例如
Foo
实例)。这对我来说是不可接受的。我无法修改上面显示的示例代码。@m0skit0如果您不能在方法调用之前插入
代理
生成,那么您是对的,因为您需要用新的
代理
实例替换
Foo
实例,所以此解决方案将无法工作。抱歉:)是的,实际上
Proxy
类需要是
Foo
工厂。谢谢你的回答:)@Brian教程链接是broken@JoãoMatos--感谢您的提醒:)我将其切换到使用Lambdas的Java 8+语法。谢谢,但您的答案基本上与:)除了已经放置在此处的答案之外,还有另一个很棒的问题+awnser