4

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

例子:

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:我不想在生产环境中使用它,我只需要在没有虚拟复制粘贴的骨架应用程序中显示输出。

4

2 回答 2

7

我会使用aspectj来定义一个为每个方法调用写入日志消息的方面。您可以在此处找到一个示例:使用 AspectJ 跟踪 Java 方法执行。或在这里:使用 AspectJ 进行日志记录

此解决方案的优点是您不必对代码进行任何更改。您将需要一些时间来了解 aspectj,但它非常符合您的要求。

于 2013-03-14T13:09:00.407 回答
1

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

看看这篇文章,它告诉你如何去做。具体来说,看看那篇文章中较低的分析方面。

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

于 2013-03-14T13:11:48.987 回答