温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何在java中使用agent

发布时间:2021-03-26 17:01:33 来源:亿速云 阅读:249 作者:Leah 栏目:编程语言

如何在java中使用agent?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

如何实现

1.实现javaagent需要实现premain方法
2.必须在MANIFEST.MF文件中有Premain-Class

demo实现

agent  package com.xueyou.demo.agent;   import javassist.ClassPool;   import javassist.CtClass;   import javassist.CtMethod;   import javassist.CtNewMethod;   import java.lang.instrument.ClassFileTransformer;   import java.lang.instrument.IllegalClassFormatException;   import java.security.ProtectionDomain;   public class FirstAgent implements ClassFileTransformer {     public final String injectedClassName = "com.xueyou.agentdemo.App";     public final String methodName = "hello";     public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {       className = className.replace("/", ".");   //    System.out.println(className);       if (className.equals(injectedClassName)) {         CtClass ctclass = null;         try {           ctclass = ClassPool.getDefault().get(className);// 使用全称,用于取得字节码类<使用javassist>           CtMethod ctmethod = ctclass.getDeclaredMethod(methodName);// 得到这方法实例           ctmethod.insertBefore("System.out.println(11111111);");           return ctclass.toBytecode();         } catch (Exception e) {           System.out.println(e.getMessage());           e.printStackTrace();         }       }       return null;     }   }

预加载类

package com.xueyou.demo; import com.xueyou.demo.agent.FirstAgent; import java.lang.instrument.Instrumentation; /**  * Hello world!  */ public class App {   public static void premain(String agentOps, Instrumentation inst) {     System.out.println("=========premain方法执行========");     System.out.println(agentOps);     // 添加Transformer     inst.addTransformer(new FirstAgent());   } }

maven指定预加载类

<build>     <plugins>       <plugin>         <groupId>org.apache.maven.plugins</groupId>         <artifactId>maven-compiler-plugin</artifactId>         <configuration>           <source>1.8</source>           <target>1.8</target>           <encoding>utf-8</encoding>         </configuration>       </plugin>       <plugin>         <groupId>org.apache.maven.plugins</groupId>         <artifactId>maven-shade-plugin</artifactId>         <version>3.0.0</version>         <executions>           <execution>             <phase>package</phase>             <goals>               <goal>shade</goal>             </goals>             <configuration>               <transformers>                 <transformer                     implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">                   <manifestEntries>                     <PremainClass>com.xueyou.demo.App</Premain-Class>                   </manifestEntries>                 </transformer>               </transformers>             </configuration>           </execution>         </executions>       </plugin>     </plugins>   </build>

如何使用

这里有两种方式指定javaagent:

1)使用命令行:java -javaagent:XXX.jar ddd.jar
2)使用idea的vm option选项。

如何在java中使用agent

关于如何在java中使用agent问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI