我希望有一个类似反射的解决方案来显示被调用的方法。
示例:
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:我不想在生产环境中使用它,我只需要这个就可以在没有虚拟复制粘贴的骨架应用中显示输出。
答案 0 :(得分:7)
我会使用aspectj来定义为每个方法调用写入日志消息的方面。您可以在此处找到示例:Tracing Java Method Execution with AspectJ。或者在这里:Logging with AspectJ
此解决方案的优点是您不必对代码进行任何更改。你需要一些时间才能进入aspectj,但它很符合你的要求。
答案 1 :(得分:1)
如果您想在不污染代码的情况下实现此目的,则必须构建一个探查器代理。
看看这个article,它会告诉你如何做到这一点。具体来说,请查看该文章中较低的分析方面。
清单2是一个分析方面,可用于在每次JVM进入或离开方法时输出类名,方法名和时间戳。