java的agent继续体验
在上次的基础上我们可以通过一些方法来获取参数的参数名,以此我们又可以达到类似于切面的功能逻辑,
首先我在之前的代码里做一点修改1
2
3
4
5
6
7
8public static void start(String input) {
try {
System.out.println("Demo starting ...");
System.out.println(input);
Thread.sleep(123);
} catch (InterruptedException ignore) {
}
}
就是带了个参数,这边是我把参数打了出来,如果没有打,我想通过agent来知道这个参数值是啥就可以用agent技术
获取代码中的变量名以及类型1
2
3
4MethodInfo methodInfo = declaredMethod.getMethodInfo();
CodeAttribute codeAttribute = methodInfo.getCodeAttribute();
LocalVariableAttribute attribute = (LocalVariableAttribute) codeAttribute.getAttribute(LocalVariableAttribute.tag);
System.out.println(attribute.variableName(0));
这边就是个string类型,我们就能够获取到 input
这个变量名,然后我们就可以在这里插入一段代码来打印这个参数1
declaredMethod.insertAfter("System.out.println( " + attribute.variableName(0)+ " );");
这样我们就能做到类似于java中切面的技术