为计时方法调用编写 Java 注释

2022-09-01 08:57:26

我想写一个java注释,对方法调用进行计时。像这样:

@TimeIt
public int someMethod() { ... }

当调用此方法时,它应该在控制台上输出此方法花费的时间

我知道如何在python中做到这一点,这就是我想要它做的:

from time import time, sleep

def time_it(func):
    def wrapper(*args, **kwargs):
        start = time()
        func(*args, **kwargs)
        stop = time()
        print "The function", func.__name__, " took %.3f" % (stop - start)
    wrapper.__name__ = func.__name__
    return wrapper

@time_it
def print_something(*args, **kwargs):
    print "before sleeping"
    print args, kwargs
    sleep(3) # wait 3 seconds
    print "after sleeping"

print_something(1, 2, 3, a="what is this?")

所以我的问题是?我在哪里可以找到一些文档来编写这样的东西,我尝试了适当的文档,但没有运气。有人可以帮助写这样的东西吗?


答案 1

AFAIK,Tomasz说得对,这不能使用注释来完成。我认为这种混淆源于这样一个事实,即Python装饰器和Java注释共享相同的语法,但在它们提供的行为方面完全不同!

批注是附加到类/方法/字段的元数据。这篇博客文章介绍了使用 AOP 的计时方法的要点。虽然它使用Spring,但基本前提保持不变。如果您愿意使用AOP编译器,那么翻译代码应该不会太困难。另一个参考(春季特定)在这里

编辑:如果您的目标是在不使用完整的分析器的情况下为您的应用程序提供整体方法计时,则可以使用hprof来收集总执行统计信息。


答案 2

简单地说:你不能!

批注不是与代码一起自动启动的代码段,它们只是批注,是可供处理代码的其他程序(如加载或运行代码)使用的信息片段。

你需要的是AOP:面向方面的编程。


推荐