Java,打印正在使用的任何方法

Java,打印正在使用的任何方法,java,methods,trace,Java,Methods,Trace,是否有一种简单的方法可以在输入任何方法后打印其签名 我目前最天真的解决方案是在所有打印其名称的方法之前添加一个System.out.print(“方法签名”)语句,但即使是对于每个getter和setter,我也必须这样做,这非常繁琐。这个库 做你想做的事 它是针对android的,但如果你不为此而构建,它可以很容易地根据你的需要进行更改。 要删除android依赖项,只需替换这些依赖项,包括: import android.os.Build; import android.os.Looper;

是否有一种简单的方法可以在输入任何方法后打印其签名

我目前最天真的解决方案是在所有打印其名称的方法之前添加一个
System.out.print(“方法签名”)
语句,但即使是对于每个getter和setter,我也必须这样做,这非常繁琐。

这个库 做你想做的事

它是针对android的,但如果你不为此而构建,它可以很容易地根据你的需要进行更改。 要删除android依赖项,只需替换这些依赖项,包括:

import android.os.Build;
import android.os.Looper;
import android.os.Trace;
import android.util.Log;
在哪里

android.util.Log

只需放置日志即可

是只使用

它使用aspectj
https://eclipse.org/aspectj/
将日志放置在特定点上

方面的使用非常整洁,例如:

@Aspect
public class Hugo {
  @Pointcut("execution(@hugo.weaving.DebugLog * *(..))")
  public void method() {}

  @Pointcut("execution(@hugo.weaving.DebugLog *.new(..))")
  public void constructor() {}
定义将注入日志的切入点。在本例中,它查找带有注释@hugo.wiven.DebugLog的方法和构造函数

然后

定义我们要如何记录内容以及要记录的内容。在“enterMethod”中,我们将方法签名记录在“exitMethod”中,我们可以记录结果和在此方法中花费的时间


它非常简单、干净,同时也非常强大,正如AspectJ intention一样。

您可以编写自定义注释来实现这一点,但不一定要这样做。性能影响非常显著。有几种方法可以做到这一点。看看这个答案:我不确定您在做什么,但我怀疑您实际上想使用调试器、探查器或日志库来代替它。:)我相信现在我是这样做的。添加更多信息…好吧,你应该问问自己:当链接关闭并且不再可用时,我的答案会发生什么。您链接了一个库并解释了如何使用它,但您的答案仍将过时。所以你应该解释一下这个库是如何解决这个问题的。。。因此,它如何打印所需的方法名。您不需要发布整个源代码(因为这也可能侵犯版权),但包含最重要行的小摘录似乎是可以的(特别是因为您链接并命名了源库)。
  @Around("method() || constructor()")
  public Object logAndExecute(ProceedingJoinPoint joinPoint) throws Throwable {
    enterMethod(joinPoint);

    long startNanos = System.nanoTime();
    Object result = joinPoint.proceed();
    long stopNanos = System.nanoTime();
    long lengthMillis = TimeUnit.NANOSECONDS.toMillis(stopNanos - startNanos);

    exitMethod(joinPoint, result, lengthMillis);

    return result;
  }