2 Star 7 Fork 5

Kinkley/javaagentparent

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
Loading...
README

这个项目做了什么?

JavaAgent实验

项目结构是怎样的?

使用Maven的聚合功能创建的项目。

projectstructure

1.agentdemo模块,是agent代理逻辑模块:

1、关键类MyAgent中必须有一个premain方法

2、resources\META-INF\MANIFEST.MF文件中必须指定agent类的全限定名

2. agenttest模块是一个springboot 项目

如何运行?

a.首先将agentdemo项目打成jar包

执行mvn clean package或者使用IDEA的图形界面执行package

打包后在target下会生成一个my-agent.jar包

b.配置agenttest项目的运行配置

-javaagent:agentdemo/target/my-agent.jar=first

agenttest

c.运行AgenttestApplication的main方法

如果在MyAgent类中打断点,会先运行到断点,才会运行AgenttestApplication的main方法。

打断点后,可以看到agent的运行逻辑定义在InstrumentationImpl的loadClassAndStartAgent方法中

instrument

实现一个统计方法调用时间的功能,不改客户端代码,体验下和动态代理的区别

运行结果:

分析:

com.umbrella.robot.agent.DurationTransformer中使用字节码修改类库javassist,

ClassFileTransformer 长期有效,在每一个类加载器加载 Class 的时候都会拦截。

对com.rong.kim.common.Lion中的runLion()方法进行了增强,在最后打印了方法执行时间。

Reference

http://jboss-javassist.github.io/javassist/tutorial/tutorial.html#read

https://javapapers.com/core-java/java-instrumentation/

关于Maven打包:

必须先install parent,否则依赖父模块的子模块会打包失败

必须install 公共模块,否则依赖公共模块的子模块会打包失败

空文件

简介

取消

发行版

暂无发行版

贡献者 (1)

全部

近期动态

4年多前评论了仓库
4年多前评论了仓库
6年多前推送了新的提交到 master 分支,13d7e08...35a805f
6年多前推送了新的提交到 master 分支,23b37d9...13d7e08
6年多前推送了新的提交到 master 分支,3bf2404...23b37d9
加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/jinxin.70/javaagentparent.git
git@gitee.com:jinxin.70/javaagentparent.git
jinxin.70
javaagentparent
javaagentparent
master

搜索帮助