无法传递方法以在字节伙伴中提供建议

问题描述 投票:0回答:1

参考: 从 AspectJ 迁移到 Byte Buddy 插件时出现问题

当我按照示例操作,但按应有的方式更新它时:

package plugin;

import java.lang.reflect.Method;
import net.bytebuddy.asm.Advice;

public class TimingAdvice {
  @Advice.OnMethodEnter
  public static void onEnter(@Advice.This Object intercepted, @Advice.Origin Method method)
      throws Throwable {
    System.out.println("method: " + method);
  }
}

我得到: 无法转换类 SomeAdvisedClass:[java.lang.IllegalStateException:无法映射静态方法或构造函数启动的此引用:public SomeAdvisedClass()]。

无论出于何种原因,只要我从建议中删除 Method 参数,它就会起作用:

package plugin;

import java.lang.reflect.Method;
import net.bytebuddy.asm.Advice;

public class TimingAdvice {
  @Advice.OnMethodEnter
  public static void onEnter(@Advice.This Object intercepted)
      throws Throwable {
    System.out.println("method: " + method);
  }
}

我使用的是JDK21,使用的是最新版本的byte buddy。

我想传递方法,因为我想检查每个参数的注释,据我所知,我需要方法来做到这一点。

java byte-buddy
1个回答
0
投票

您似乎正在拦截静态方法或构造函数。在这种情况下,无法分配

@Advice.This
(进入阶段)。您可以定义一个属性来绑定
null
@Advice.This(nullIfEmpty = true)

© www.soinside.com 2019 - 2024. All rights reserved.