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