gpt4 book ai didi

java agent 使用及实现代码

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章java agent 使用及实现代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

java agent的作用 。

在字节码这个层面对类和方法进行修改的技术,能够在不影响编译的情况下,修改字节码。可以理解spring的aop技术 。

如何实现 。

1.实现javaagent需要实现premain方法 2.必须在manifest.mf文件中有premain-class 。

demo实现 。

?
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); // 使用全称,用于取得字节码类<使用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 ;
     }
   }

预加载类 。

?
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方法执行========" );
     system.out.println(agentops);
     // 添加transformer
     inst.addtransformer( new firstagent());
   }
}

maven指定预加载类 。

?
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选项.

java agent 使用及实现代码

总结 。

以上所述是小编给大家介绍的java agent 使用及实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。

原文链接:https://segmentfault.com/a/1190000015765838 。

最后此篇关于java agent 使用及实现代码的文章就讲到这里了,如果你想了解更多关于java agent 使用及实现代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com