如何在Java中获取方法的调用者名称

时间:2021-06-29 18:12:35

标签: java spring interceptor

我有一个 API,它有很多操作,比如 getX、getY、getZ 等,还有很多写操作,比如 writeX、writeY 和 writeZ 等。 由于这是一个休息服务,每个控制器方法都映射有特定的操作名称。

@Controller(url) //just an example 
getX(param1, param2){

}

我有与 dynamodb 表交互的数据访问层。我计划将读取和写入容量指标添加到我的 DAO 层,以便我知道哪个 API 成本高。 一个 API 可以一次访问多个 dynamodb 表。 鉴于此,如果我想知道哪个 API 调用了 dynamodb,我将不得不从控制器--> 管理器--> DAO 方法传入操作名称。 这将需要大量的代码重构。

是否有更好更有效的方法来获取 DAO 层内最顶层的调用者名称,而无需传递方法名称。

1 个答案:

答案 0 :(得分:0)

很难操作,但这可以解决问题

import times


proc timeit*[T] (the_func: proc, passed_args: varargs[T]): float =
    let t = cpuTime()
    var the_results = the_func(passed_args)  # This is where I need to unpack arguments
    cpuTime() - t


proc test_func(x: int, y: int): int =
    x + y


echo timeit(test_func, 15, 5)

基本上指数越高,方法调用的时间就越短。尽管看起来很诱人,但控制器不会是第一个被调用的方法,并非总是如此。您可以做的是使用方法 StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace() 并可能获取包含“Controller”字和类名的数组的最后一项。

相关问题