中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在java中使用agent

發布時間:2021-03-26 17:01:33 來源:億速云 閱讀:206 作者: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

东阳市| 三穗县| 桑植县| 马公市| 辽阳市| 宕昌县| 遂溪县| 遂川县| 昭苏县| 淮滨县| 肃宁县| 石河子市| 邯郸县| 班戈县| 长丰县| 石柱| 罗源县| 定日县| 鄂尔多斯市| 崇信县| 云南省| 沁源县| 肇东市| 万载县| 宝鸡市| 习水县| 綦江县| 兴宁市| 鱼台县| 保亭| 广宁县| 闽侯县| 高安市| 隆尧县| 邛崃市| 固始县| 阿尔山市| 无极县| 涟源市| 靖江市| 灵台县|