1 Star 0 Fork 5

AA-nevermore / javaagentparent

forked from Kinkley / javaagentparent 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
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
https://gitee.com/AA-nevermore/javaagentparent.git
git@gitee.com:AA-nevermore/javaagentparent.git
AA-nevermore
javaagentparent
javaagentparent
master

搜索帮助