Comment implémenter l'agent Java ? 1. Pour implémenter l'agent Java, vous devez implémenter la méthode premain ; 2. Il doit y avoir Premain-Class dans le fichier MANIFEST.MF.
La technologie de modification des classes et des méthodes au niveau du bytecode peut modifier le bytecode sans affecter la compilation. Vous pouvez comprendre le rôle de la technologie aop de Spring
La technologie permettant de modifier les classes et les méthodes au niveau du bytecode, qui peuvent être modifiées sans affecter la compilation. Vous pouvez comprendre comment implémenter la technologie aop de Spring
pour implémenter Javaagent. Vous devez implémenter la méthode premain
. qui doit être dans le fichier MANIFEST.MF Il y a Premain-Class
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()); } }
<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>
Il existe deux façons de spécifier javaagent :
1) Utilisez la ligne de commande : java -javaagent :XXX.jar ddd.jar
2 ) Utilisez l'option vm d'idea.
Articles associés :
Exemple de code Java avant d'utiliser l'agent pour implémenter la méthode principale
Résumé du didacticiel d'utilisation du service SQL Server SQL Agent
Vidéos associées :
Le dernier didacticiel vidéo complet Java
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!