免费网站模板psd,珠海网站建设 科速,网络运营策划,sql2008做网站背景描述javaagent是在JDK5之后提供的新特性#xff0c;也可以叫java代理。开发者通过这种机制(Instrumentation)可以在加载class文件之前修改方法的字节码(此时字节码尚未加入JVM)#xff0c;动态更改类方法实现AOP#xff0c;提供监控服务如#xff1b;方法调用时长、可用…背景描述javaagent是在JDK5之后提供的新特性也可以叫java代理。开发者通过这种机制(Instrumentation)可以在加载class文件之前修改方法的字节码(此时字节码尚未加入JVM)动态更改类方法实现AOP提供监控服务如方法调用时长、可用率、内存等。开发简述通过实现ClassFileTransformer接口方法动态更改方法的字节码。在方法前后加上时间戳最后执行完成输出执行时长。环境准备1、IntelliJ IDEA Community Edition 2018.3.1 x642、jdk1.8 64位配置信息(路径相关修改为自己的)1、java调试时配置2.1、配置位置Run/Debug Configurations -VM options2.2、配置内容(编译后的jar放到根目录下)-javaagent:E:itstack-demo-javaagent-1.0-SNAPSHOT.jaragentargs代码示例pom.xml org.javassist javassist 3.22.0-GAMyAgent.javaMyTransformer.javapublic class MyTransformer implements ClassFileTransformer { private final static String prefix long startTime System.currentTimeMillis();; private final static String postfix long endTime System.currentTimeMillis();; // 被处理的方法列表 private final static Map methodMap new HashMap(); public MyTransformer() { //对指定方法监控 add(org.itstack.demo.test.AgentTest.queryUserAge); add(org.itstack.demo.test.AgentTest.queryUserName); } private void add(String methodString) { String className methodString.substring(0, methodString.lastIndexOf(.)); String methodName methodString.substring(methodString.lastIndexOf(.) 1); List list methodMap.get(className); if (list null) { list new ArrayList(); methodMap.put(className, list); } list.add(methodName); } Override public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { className className.replace(/