Maison  >  Article  >  Java  >  Comment implémenter l’agent Java ? Partager les cas d'utilisation de l'agent Java

Comment implémenter l’agent Java ? Partager les cas d'utilisation de l'agent Java

php是最好的语言
php是最好的语言original
2018-07-27 09:46:211940parcourir

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

agent Java

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

  1. pour implémenter Javaagent. Vous devez implémenter la méthode premain

  2. . qui doit être dans le fichier MANIFEST.MF Il y a Premain-Class

implémentation de démonstration

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;
        }
    }

classe préchargée

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 spécifie la classe de pré-chargement

<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>

Comment utiliser

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.

Comment implémenter l’agent Java ? Partager les cas dutilisation de lagent Java

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn