列出要调用的方法的名称

时间:2013-03-14 13:07:18

标签: java reflection

我希望有一个类似反射的解决方案来显示被调用的方法。

示例:

public class Foo {
    public void bar() {
         new Y().x();
    }
}

public class Y {
    public void x() {
    } 
} 

public class Main {
    public static void main(String[] args) {
        // SETTING UP THE MAGIC
        new Foo().bar(); 
        new Y().x();
    }
}

输出应为:

1. Foo.bar
   1.2 Y.x
2. Y.x

最理想的是,每次调用一个方法时都会触发一个事件处理程序(某些信息可以作为参数传递)。

PS:我不想在生产环境中使用它,我只需要这个就可以在没有虚拟复制粘贴的骨架应用中显示输出。

2 个答案:

答案 0 :(得分:7)

我会使用aspectj来定义为每个方法调用写入日志消息的方面。您可以在此处找到示例:Tracing Java Method Execution with AspectJ。或者在这里:Logging with AspectJ

此解决方案的优点是您不必对代码进行任何更改。你需要一些时间才能进入aspectj,但它很符合你的要求。

答案 1 :(得分:1)

如果您想在不污染代码的情况下实现此目的,则必须构建一个探查器代理。

看看这个article,它会告诉你如何做到这一点。具体来说,请查看该文章中较低的分析方面。

  

清单2是一个分析方面,可用于在每次JVM进入或离开方法时输出类名,方法名和时间戳。