在JVM中运行中,类是通过classLoader加载.class文件进行生成的。在类加载加载.class文件生成对应的类对象之前时,我们可以通过修改.class文件内容(就是字节码修改技术),达到修改类的目的。JDK提供了对字节码进行操作的一系列api,而使用这些api开发出的程序就可以称之为java agent。
java agent能做什么?
不修改目标应用达到代码增强的目的,就好像spring的aop一样,但是java agent是直接修改字节码,而不是通过创建代理类。例如skywalking就是使用java agent技术,为目标应用代码植入监控代码,监控代码进行数据统计上报的。这种方式实现了解耦,通用的功能。
文末附上了我写的一款接口mock agent。感兴趣的可以看看,学习一波。
使用示例 入门创建maven工程
创建一个简单的maven工程:
添加agent类:
pom.xml打包配置
添加打包插件:
将工程打成jar包,就可以使用了。打包很简单:
在target目录下就出现了jar包:
使用agent
创建测试类:
添加javaagent参数配置:
-javaagent:D:person-projectdemo-agent argetdemo-agent-1.0-SNAPSHOT.jar
运行测试类:
进阶(一款接口mock数据小插件)流程
使用java agent为接口mock数据
agent类:
mock数据配置类
字节码操作类
配置文件:mock.json
{ "com.hiwei.test.DemoService":{ -- 类名 "add":"return 123;", -- 方法名:mock代码 "delete":"return "mock delete";", "getUser": "com.hiwei.test.User user2 = new com.hiwei.test.User();return user2;" }}
使用配置参数:
-javaagent:D:person-projectjava-agentdemo-agent argetdemo-agent-1.0-SNAPSHOT.jar=D:person-projectjava-agentagent-testmock.json
源码链接:https://github.com/hiwei-zhang/java-agent
到此这篇关于Java Agent探针技术详解示例的文章就介绍到这了,更多相关Java Agent内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!