我正在尝试使用Java应用程序的指标来查找性能。我使用java代理与bytebuddy获取metrics。在我的测试程序中,我要检查的方法运行了几次。只有当我传递参数包含名称'connector'时我需要获取指标。所以我想用bytebuddy来解决这个问题,我使用了@AllArguments Object[] args
。但我尝试使用这个我的TimerAdvice类没有运行。
这是我的代码
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);}}
这是我的TimerAdvice类
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
这个时,只有TimerAdvice在没有它的情况下无法正常工作。我的代码中存在这个问题吗?
任何帮助..
答案 0 :(得分:1)
您可能正在导入错误的注释。您正在寻找的注释是@Advice.AllArguments
。
这种命名结合是不幸的,但改变它已经太晚了。所有建议可兼容的注释都是前缀。 Tge其他用于方法委派。