Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ByteBuddy:如何在转换方法时跨enter/exit添加局部变量_Java_Byte Buddy - Fatal编程技术网

Java ByteBuddy:如何在转换方法时跨enter/exit添加局部变量

Java ByteBuddy:如何在转换方法时跨enter/exit添加局部变量,java,byte-buddy,Java,Byte Buddy,我试图在Java代理中使用ByteBuddy来使用OpenTracing为一些较旧的库提供工具。这与。在使用私有类成员传递活动范围时,我成功地实现了这一点,但不幸的是,在某些情况下,这是不可行的(错误处理会清除成员字段) 因此,我尝试使用ByteBuddy的能力创建局部变量,这些变量可以从@Advice.OnMethodEnter保留到@Advice.OnMethodExit。这将允许我在方法enter上创建OpenTracing跨度,并在方法exit上完成它。不过,我不确定我的用例是否有效,因

我试图在Java代理中使用ByteBuddy来使用OpenTracing为一些较旧的库提供工具。这与。在使用私有类成员传递活动范围时,我成功地实现了这一点,但不幸的是,在某些情况下,这是不可行的(错误处理会清除成员字段)

因此,我尝试使用ByteBuddy的能力创建局部变量,这些变量可以从@Advice.OnMethodEnter保留到@Advice.OnMethodExit。这将允许我在方法enter上创建OpenTracing跨度,并在方法exit上完成它。不过,我不确定我的用例是否有效,因为我使用的是transformer,它与@Advice.Local注释的测试用例不完全匹配

我试着遵循中使用的语法

但是,在exit方法中,span和scope变量始终为null。我是ByteBuddy的新手,所以我肯定我错过了一些基本的东西

公共类SimpleFrameworkDispatcherAgentRule扩展了AgentRule{
@凌驾

public Iterable您必须分配变量,如果您在委托方法中这样做是没有帮助的

Byte Buddy将通知代码用作模板,其中特定方法中局部变量的任何赋值都转换为内联字节代码中插入指令的局部变量的访问

Java没有C或其他语言意义上的指针语义。如果要分配
span
scope
,必须在带注释的方法本身中这样做