1.javaagent基本使用
什么是javaagent?
javaagent 是java1.5之后引入的特性,其主要作用是在class 被加载之前对其拦截,已插入我们的监听字节码。上篇文章我们说了字节码,字节码插桩技术是个重点也是个难点。必须要学会喔。
javaagent使用说明
构建一个javaagent 示例jar包
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<configuration>
<archive>
<manifestEntries>
<Project-name>${project.name}</Project-name>
<Project-version>${project.version}</Project-version>
<Premain-Class>XXXX</Premain-Class>
<Boot-Class-Path>javassist-3.18.1-GA.jar</Boot-Class-Path>
<Can-Redefine-Classes>false</Can-Redefine-Classes>
</manifestEntries>
</archive>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
1.javassist基本使用
什么是javassist?
Javassist是一个开源的分析、编辑和创建Java字节码的类库。其主要的优点,在于简单,而且快速。直接使用java编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成
Javassist 作用?
a. 运行时监控插桩埋点
b. AOP动态代理实现(性能上比Cglib生成的要慢)
c. 获取访问类结构信息:如获取参数名称信息
Javassist使用流程
Javassist简单示例,生成一个简单类
Javassist特殊语法与注意事项说明
与源码不同地方
a) 不能引用在方法中其它地方定义的局部变量
b) 不会对类型进行强制检查:如 int start = System.currentTimeMillis(); 或 String i=”abc”;
c) 使用特殊的项目语法符号
Javassist 时间比较示例代码
(对APM性能监控感兴趣的朋友可以加群一起研究技术问题658706010验证码:头条
Javassist 高级使用完成一个动态代理功能
3. 如何对WEB项目对象进行字节码插桩
1.统一获取HttpRequest请求参数插桩示例
2.获取HttpRequest参数遇到ClassNotFound的问题
3.Tomcat ClassLoader 介绍,及javaagent jar包加载机制
4.通过class 加载沉机制实现在javaagent 引用游jar 包
总结下还有不明白的地方可以回看上面 Javassist 时间比较示例代码 这条一起探讨