代码拉取完成,页面将自动刷新
本项目主要对ASM/Javassist/Bytebuddy等字节码增强技术进行演示。
相关博客文章见Java字节码增强技术Bytebuddy探路篇
+ demo-core 基础类
+ demo-app 演示应用,循环调用Greeting.sayHello()
+ demo-agent 一个简单的Java Agent,输出所有JVM加载的类列表
+ demo-asm 一个Java Agent,通过ASM对Greeting类进行增强
+ demo-javaassist 一个Java Agent,通过Javassist对Greeting类进行增强
+ demo-bytebuddy 一个Java Agent,通过Bytebuddy对Greeting类进行增强
+ demo-cglib 通过cglib对Greeting类进行增强
本项目使用maven 3+进行构建,命令为,
mvn clean package
一个简单的运行命令,
java -javaagent:./demo-agent/target/agent-agent.jar -jar ./demo-app/target/demo-app.jar
可以通过控制台查看所有JVM加载的类列表,
loading agent..
agent has been loaded.
transforming class = java/lang/invoke/MethodHandleImpl
transforming class = java/lang/invoke/MethodHandleImpl$1
transforming class = java/lang/invoke/MethodHandleImpl$2
transforming class = java/util/function/Function
transforming class = java/lang/invoke/MethodHandleImpl$3
transforming class = java/lang/invoke/MethodHandleImpl$4
transforming class = java/lang/ClassValue
为了方便展示不同字节码增强技术,下面将以Greeting类为例,对sayHello()方法进行加强。
public class Greeting {
public String sayHello() {
String hello = "hello,world";
System.out.println(hello);
return hello;
}
}
分别在sayHello函数执行前后添加打印语句,输出如下类似信息。
begin of sayhello().
hello,world
end of sayhello().
执行命令
java -javaagent:./demo-asm/target/agent-asm.jar -jar ./demo-app/target/demo-app.jar
输出日志
count = 1
begin of sayhello().
hello,world
end of sayhello().
count = 2
begin of sayhello().
hello,world
end of sayhello().
执行命令
java -javaagent:./demo-javaassist/target/agent-jassist.jar -jar ./demo-app/target/demo-app.jar
输出日志
count = 1
begin of sayhello()
hello,world
end of sayhello()
count = 2
begin of sayhello()
hello,world
end of sayhello()
执行命令
java -javaagent:./demo-bytebuddy/target/agent-buddy.jar -jar ./demo-app/target/demo-app.jar
输出日志
[main][INFO] loading agent..
[main][INFO] agent has been loaded.
count = 1
[main][INFO] transforming com.pphh.demo.api.Greeting...
start of method()
hello,world
end of method()
count = 2
start of method()
hello,world
end of method()
邮箱地址:peipeihh@qq.com,欢迎来信联系。
更多的信息,可以访问博客地址:hyhblog.cn。
Apache License 2.0
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。