java - 如何在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 层中最顶层的调用者名称,而无需传递方法名称。
解决方案
很难操纵,但这可以解决问题
StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()
基本上,索引越高,方法调用的时间越短。尽管看起来很诱人,但控制器不会是第一个被调用的方法,并非总是如此。您可以做的是使用该方法.getClassName()
,并可能获取数组的最后一项,其中包含带有类名的“Controller”单词。
推荐阅读
- angularjs - 在两个窗口之间共享变量。Angularjs
- excel - 如何使用 VBA Excel 合并两个以上的字符串而不会遇到运行时错误?
- c# - 我希望在加载大文件时避免表单冻结以显示
- select - 查询重复值并根据它们选择列值
- mysql - mysql 在 xampp 中停止工作,出现错误 InnoDB:文件(未知):“读取”返回操作系统错误 223
- ios - iOS 应用上的 BLE 热敏打印机字体配置
- javascript - 使用JSoup获取被onclick按钮javascript隐藏的表的内容
- ionic-framework - 如何使用 ionic 检查 NFC 是否适用于 iOS?
- javascript - 如何与 d3.js v5 中的元素以及缩放事件进行交互
- android - 将已发布的应用程序链接到 Firebase 控制台