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 使用及实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对快网idc网站的支持!
原文链接:https://segmentfault.com/a/1190000015765838
相关文章
猜你喜欢
- ASP.NET自助建站系统中如何实现多语言支持? 2025-06-10
- 64M VPS建站:如何选择最适合的网站建设平台? 2025-06-10
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
- 个人网站服务器域名解析设置指南:从购买到绑定全流程 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-06-04 83
-
2025-05-29 62
-
2025-05-25 37
-
2025-05-29 12
-
2025-05-27 40
热门评论


