Java 如何使用bytebuddy获得方法的一致性
我试图通过java应用程序使用度量来了解性能。我使用java代理和get metrics的bytebuddy。在我的测试程序中,我要检查的方法运行了好几次。只有当它传递一个包含名称“connector”的参数时,我才需要获取度量。所以我想用bytebuddy得到这个,我用了Java 如何使用bytebuddy获得方法的一致性,java,performance,byte-buddy,Java,Performance,Byte Buddy,我试图通过java应用程序使用度量来了解性能。我使用java代理和get metrics的bytebuddy。在我的测试程序中,我要检查的方法运行了好几次。只有当它传递一个包含名称“connector”的参数时,我才需要获取度量。所以我想用bytebuddy得到这个,我用了@AllArguments Object[]args来实现这个。但是我试着用这个来代替我的计时工具课。 这是我的密码 class Agent { public static void premain(String argum
@AllArguments Object[]args
来实现这个。但是我试着用这个来代替我的计时工具课。
这是我的密码
class Agent {
public static void premain(String arguments, Instrumentation instrumentation) {
System.out.println("Premain");
new AgentBuilder.Default()
.with(new AgentBuilder.InitializationStrategy.SelfInjection.Eager())
.type((ElementMatchers.nameContains("ConnectorCallback")))
.transform(
new AgentBuilder.Transformer.ForAdvice()
.include(MethodListner.class.getClassLoader())
.advice(ElementMatchers.any(), MethodListner.class.getName())
).installOn(instrumentation);}}
这是我的计时设备课
public class TimerAdvice {
@Advice.OnMethodEnter
static void enter(@Advice.Origin String method , @AllArguments Object[] args)throws Exception {
if (changeMethodName(method).equals("BalConnectorCallback")) {
//Metrics works
}
}
@Advice.OnMethodExit
static void exit(@Advice.Origin String method, @AllArguments Object[] args) throws Exception {
if (changeMethodName(method).equals("done")) {
//Metrics works
}
}
public static String changeMethodName(String method) {
String newMethod = method.substring(0, method.lastIndexOf('('));
newMethod = newMethod.substring(newMethod.lastIndexOf('.') + 1);
//newMethod = newMethod.replace(".", " ");
return newMethod;
}}
当我使用@AllArguments Object[]args
时,只有这台TimerDevice在没有它的情况下才能正常工作。我的代码中有这个问题吗?
任何帮助。您可能导入了错误的注释。您要查找的注释是
@Advice.AllArguments
这种命名冲突是不幸的,但现在改变它为时已晚。所有可兼容的注释都带有前缀。Tge-others用于方法委托