我想编写一个简单的Java代理,它可以打印所检测的Java程序调用的方法的名称。

例如,我要检测的Java程序是:

public class TestInstr {

public static void sayHello() {
    System.out.println("Hello !");
}

public static void main(String args[]) {
    sayHello();
    sayHello();
    sayHello();
 }

}

我想显示这样的东西:
method sayHello has been called
Hello !
method sayHello has been called
Hello !
method sayHello has been called
Hello !

谢谢你的帮助!

最佳答案

您可以使用Javassist之类的工具库来执行此操作。

让我给您一个单一方法的示例,您可以使用Javassist或反射将其扩展到所有方法:

ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get("TestInstr");
CtMethod m = cc.getDeclaredMethod("sayHello");
m.insertBefore("{ System.out.println(\"method sayHello has been called\"); }");
cc.writeFile();

检查此链接以获取详细信息:http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/tutorial/tutorial2.html#intro

关于java - 如何检测Java方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10659610/

10-13 03:38