0

在我的 Java 应用程序中,我希望获得在特定线程中执行的不同方法的名称(和实际运行时类)。它与获取常规堆栈跟踪不同。就像我在观察我的程序的执行,并看到不同方法的名称在它们运行时出现。

一种(幼稚且实际上不可行的)方法是在每个方法的开头放置一条打印消息以打印其名称(类、行号等)。我可以使用异常跟踪来获取要打印的所有相关信息,但是我必须在每个方法的开头添加至少一行,这不是很优雅。此外,如果我错过/忘记在任何方法的开头添加一行,则不会显示该方法名称。此外,这种策略也不是面向未来的。是否有任何仪器/其他技术可以帮助我实现这一目标。

4

2 回答 2

1

你应该看看面向方面的编程和所有实现它的框架。

如果您使用的是 spring,您可以查看简单的跟踪拦截器,它将完全按照您的要求进行:http ://static.springsource.org/spring/docs/1.2.9/api/org/springframework/aop/interceptor /SimpleTraceInterceptor.html

于 2013-03-27T15:14:22.663 回答
1

除了下面另一个答案中提到的 AOP 和 Spring Listener 之外,您还可以使用一些更复杂的代码生成框架,例如 ASM 或 CGLib。您将编写代码以在运行时重写每个类,并将这些打印指令附加到方法的开头。但这需要对字节码有更深入的了解。

于 2013-03-27T15:16:46.560 回答