首页 > 解决方案 > 如何在Java中获取方法的调用者名称

问题描述

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

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

}

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

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

标签: javaspringinterceptor

解决方案


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

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()

基本上,索引越高,方法调用的时间越短。尽管看起来很诱人,但控制器不会是第一个被调用的方法,并非总是如此。您可以做的是使用该方法.getClassName(),并可能获取数组的最后一项,其中包含带有类名的“Controller”单词。


推荐阅读