为了检索调用者的类,我们可以使用StackWalker
@Advice.OnMethodEnter
static void enter(@Advice.This Object thiz,
@Advice.Origin Method method,
@Advice.AllArguments Object... args) {
var walker = StackWalker.getInstance(RETAIN_CLASS_REFERENCE);
var callerClass = walker.getCallerClass();
...
}
但是,如果caller对象还没有被垃圾回收,那么有没有办法获得它的引用呢?
特别是,我对caller对象的identity hash code感兴趣。
发布于 2019-06-03 06:25:39
不,这是不可能的,无论是在Java代理中,还是在没有Java代理的情况下。获取引用的唯一方法是检测方法的调用方,以提供其自己的实例引用。
然而,从概念上讲,我不建议使用这种解决方案,因为它很容易受到重构的影响,而且如果发生反射、方法处理或静态方法调用,也会产生未定义的行为。
https://stackoverflow.com/questions/56415024
复制相似问题