一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語言|

服務(wù)器之家 - 編程語言 - Java教程 - java agent 使用及實(shí)現(xiàn)代碼

java agent 使用及實(shí)現(xiàn)代碼

2021-05-21 10:34木木甫 Java教程

java agent的作用可以在字節(jié)碼這個(gè)層面對(duì)類和方法進(jìn)行修改的技術(shù),能夠在不影響編譯的情況下,修改字節(jié)碼。本文主要給大家講解java agent 使用及實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧

java agent的作用

在字節(jié)碼這個(gè)層面對(duì)類和方法進(jìn)行修改的技術(shù),能夠在不影響編譯的情況下,修改字節(jié)碼。可以理解spring的aop技術(shù)

如何實(shí)現(xiàn)

1.實(shí)現(xiàn)javaagent需要實(shí)現(xiàn)premain方法
2.必須在manifest.mf文件中有premain-class

demo實(shí)現(xiàn)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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);// 使用全稱,用于取得字節(jié)碼類<使用javassist>
          ctmethod ctmethod = ctclass.getdeclaredmethod(methodname);// 得到這方法實(shí)例
          ctmethod.insertbefore("system.out.println(11111111);");
          return ctclass.tobytecode();
        } catch (exception e) {
          system.out.println(e.getmessage());
          e.printstacktrace();
        }
      }
      return null;
    }
  }

預(yù)加載類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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方法執(zhí)行========");
    system.out.println(agentops);
    // 添加transformer
    inst.addtransformer(new firstagent());
  }
}

maven指定預(yù)加載類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<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選項(xiàng)。

java agent 使用及實(shí)現(xiàn)代碼

總結(jié)

以上所述是小編給大家介紹的java agent 使用及實(shí)現(xiàn)代碼,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)服務(wù)器之家網(wǎng)站的支持!

原文鏈接:https://segmentfault.com/a/1190000015765838

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色啪啪888.com| 午夜影院网站 | 欧美日韩中文字幕一区二区高清 | 36美女厕所撒尿全过程 | 成人啪啪漫画羞羞漫画www网站 | 999久久久 | 99re在线精品视频免费 | 新影音先锋男人色资源网 | 亚欧成人中文字幕一区 | 2019国内自拍大神视频 | 青青五月天 | 精品国产品香蕉在线观看75 | 国产日韩欧美在线播放 | 久久香蕉国产免费天天 | 五月天国产精品 | 亚洲精品福利在线 | 国产福利一区二区三区 | 韩国最新理论三级在线观看 | bdsm中国精品调教 | 69av免费视频 | 欧美日韩色图 | 蜜桃麻豆 | 国产精品露脸国语对白手机视频 | 日本中文字幕不卡在线一区二区 | 久草青青在线 | 吃大胸寡妇的奶 | 国产亚洲女人久久久久久 | 性奶老妇 视频 | 91啦中文在线观看 | 欧美三茎同入 | 亚洲精品在线网址 | 国精视频一区二区视频 | 国产精品俺来也在线观看了 | 欧美日韩亚洲综合在线一区二区 | 修修视频在线观看 | 日本免费三片在线观看 | 羞羞视频动漫 | 99国产精品热久久久久久夜夜嗨 | 欧美在线一级视频 | 色五夜婷婷| 高清国产激情视频在线观看 |