Heim  >  Artikel  >  Java  >  Wie implementiert man einen Java-Agenten? Teilen Sie Anwendungsfälle von Java-Agenten

Wie implementiert man einen Java-Agenten? Teilen Sie Anwendungsfälle von Java-Agenten

php是最好的语言
php是最好的语言Original
2018-07-27 09:46:211940Durchsuche

Wie implementiert man einen Java-Agenten? 1. Um den Java-Agenten zu implementieren, müssen Sie die Premain-Methode implementieren. 2. In der Datei MANIFEST.MF muss die Premain-Klasse vorhanden sein.

Die Technologie zum Ändern von Klassen und Methoden auf Bytecode-Ebene kann den Bytecode ändern, ohne die Kompilierung zu beeinträchtigen. Sie können die Rolle der AOP-Technologie von Spring verstehen

Java-Agent

Die Technologie zum Ändern von Klassen und Methoden auf Bytecode-Ebene, die geändert werden kann, ohne die Kompilierung des Bytecodes zu beeinträchtigen. Sie können verstehen, wie Sie die AOP-Technologie von Spring implementieren

  1. , um Javaagent zu implementieren. Sie müssen die Premain-Methode implementieren

  2. die in der MANIFEST.MF-Datei enthalten sein muss. Es gibt eine Premain-Klasse

Demo-Implementierung

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

vorinstallierte Klasse

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 spezifizierte vorinstallierte Klasse

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

Verwendung

Es gibt zwei Möglichkeiten, Javaagent anzugeben:
1) Verwenden Sie die Befehlszeile: java -javaagent:XXX.jar ddd.jar
2) Verwenden Sie die VM-Optionsoptionen von Idea.

Wie implementiert man einen Java-Agenten? Teilen Sie Anwendungsfälle von Java-Agenten

Verwandte Artikel:

Java-Codebeispiel vor der Verwendung des Agenten zur Implementierung der Hauptmethode

Zusammenfassung des Tutorials zur Nutzung des SQL Server-SQL-Agent-Dienstes

Ähnliche Videos:

Das neueste vollständige Java-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWie implementiert man einen Java-Agenten? Teilen Sie Anwendungsfälle von Java-Agenten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn