获取在特定线程中执行的方法的名称

问题描述:

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

一种(幼稚且实际上不可行)的方法是在每种方法的开始处输出打印信息以打印其名称(班级,行号等)。我可以使用异常追踪来获取所有相关的信息,但是我必须在每个方法的开头添加至少一行,这不是很优雅。此外,如果我错过/忘记在任何方法的开头添加一行,该方法名称将不会显示。而且,这种策略不是面向未来的。是否有任何仪器/其他技术可以帮助我实现这一点。

你应该看看Aspect Oriented Programmation和所有实现它的框架。

如果你正在使用Spring,你可以看一下简单的跟踪拦截器,会做你想要什么:http://static.springsource.org/spring/docs/1.2.9/api/org/springframework/aop/interceptor/SimpleTraceInterceptor.html

+0

我想过AOP(在研究生院教过),但它太麻烦,需要我插入代码,比每个方法开始时添加一行更有效。我不知道有关泉源。我目前正在检查这是什么。 – 2013-03-27 15:23:35

除了AOP并在下面对方的回答中提到的春天监听器,你也许可以使用一些更复杂的代码生成框架,如ASM或CGLib。您将在运行时编写代码来重写每个类,并在方法开始处附加这些打印说明。但是这需要更深入的字节码知识。