Java中的捕获方法调用
我需要用Java捕获一个方法调用,我不想使用JPDA或JDI;我希望它发生在原始JVM中 例如:Java中的捕获方法调用,java,methods,Java,Methods,我需要用Java捕获一个方法调用,我不想使用JPDA或JDI;我希望它发生在原始JVM中 例如: public class A { public void m() {} } public class Main { public static void main(String[] args) { A a = new A(); a.m(); } } 我不想实际让该方法在当时执行,但需要捕获它并将其安排在队列中。因此,AOP在这方面不会帮助我。我考虑了代理这个方法。例如
public class A {
public void m() {}
}
public class Main {
public static void main(String[] args) {
A a = new A();
a.m();
}
}
我不想实际让该方法在当时执行,但需要捕获它并将其安排在队列中。因此,AOP在这方面不会帮助我。我考虑了代理这个方法。例如:
public class A {
public void m() {
methodQueue.add(new MethodInvocation() {
public void invoke() {m_orig();}
});
}
private void m_orig(){}
}
有什么想法吗?提前非常感谢。您可以在Java中使用一种称为动态代理的技术。以下文件详细描述了这些问题: 然后,您的问题的解决方案将是(只需稍作改动): 然后为a接口的实现构造一个排队代理,并调用m方法:
A a = (A) EnqueueProxy.newInstance(new AImpl());
a.m();
看起来您也会很高兴看到一个s队列。但是,从概念上讲,代理是AOP的一个实现,这一事实可能会削弱这个出色的答复。帮助我创建了用于调试的包装器。感谢这实际上是一个棘手的问题,因为我不确定是否要在多核平台上的不同内核上同时运行方法调用。谢谢。好吧,它与并发无关,它只是包装了计算——只是它被称为“run()”而不是“invoke()”;)撇开玩笑不谈,您可以稍后自己在callable上调用run()。
A a = (A) EnqueueProxy.newInstance(new AImpl());
a.m();