开发者社区 问答 正文

Spring 中这样的方法名是怎样出现的呢?

Spring 中这样的方法名是怎样出现的呢?

我写了一个方法用来获取调用它的方法的名称:

/**
 * 获取调用栈中的方法名
 * <p>
 * StackTraceElement: [deduceInvokerMethodName, invoker...]
 *
 * @return 方法名
 */
private String deduceInvokerMethodName() {
    StackTraceElement[] stackTraceElements = new RuntimeException().getStackTrace();
    return stackTraceElements[1].getMethodName();
}

但是在实际使用中,我得到了类似如下形式的方法名:

invoker$original$4FWoUDJy

其中,$original$4FWoUDJy 部分是从何而来的呢?

这个方法位于这样一个类下面:

@Slf4j
@Validated
@RestController
@RequestMapping("/api/v2")
public class Api {}

同时使用了 AOP 拦截处理相关的请求,是 cglib 还是什么造成了这样的结果吗?

展开
收起
问问小秘 2020-01-09 18:36:02 2315 分享 版权
1 条回答
写回答
取消 提交回答
  • 这是内部类的命名方式,源码是没有的,编译后class文件的名称是这个格式,你也可以在本地写个内部类看看

    2020-01-09 18:40:47
    赞同 展开评论
问答分类:
问答地址: