搭建agent服务+javassist字节码操作

简介

对于agent,是在vm启动,执行方法前,将字节码修改的服务代理。

对于javassist,是修改字节码具体实现。

这两个结合有什么用啊?写测试框架,不仅局限于此。

对于字节码:

字节码处理工具,bcel,asm与虚拟机指令打交道。Javassist采用java编码的方法处理字节码,性能相对较低,但方便。

官方:http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/

例子:

创建class http://blog.csdn.net/sadfishsc/article/details/9999169

拦截方法AOP http://yonglin4605.iteye.com/blog/1396494

教程:http://www.ibm.com/developerworks/cn/java/j-dyn0916/

API: http://www.csg.ci.i.u-tokyo.ac.jp/~chiba/javassist/html/index.html

API文档:045Javassist入门手册

使用

与Agent结合的使用

1.创建项目,引入jar包

2.编写MANIFEST.MF文件

内容:

manifest-Version: 1.0

Premain-Class: com.agent.PerfMonAgent //启动agent模式的实现类

Can-Redefine-Classes: true

3.编写PerfMonAgent类,即jvm启动agent模式后,执行方法之前调用的类

4.编写PerfMonXformer类实现ClassFileTransformer接口的transform方法,即转化类格式的实现

具体的methods就是字节码的具体处理,需要用到javassist包中的提供的方法来修改。

5.将agent服务打包jar,使用自定义.MF文件

1) 项目右键->Export->java->JAR file

2) 选中项目

3) 选择jar的路径

4) Next,Next

5) 使用MF文件

6) Finish

6.项目配置,加入agent服务

1) 项目右键,或者java文件右键->Run Configurations

2) (x)=Arguments选项卡,填入启动VM参数

3) Run

7.启动项目或者运行某一个java类,都会启动agent并修改字节码

下载

源码:http://download.csdn.net/detail/supermarss/8716783

时间: 2024-11-08 20:44:57

搭建agent服务+javassist字节码操作的相关文章

JAVAssist字节码操作

Java动态性的两种常见实现方式 字节码操作 反射 运行时操作字节码可以让我们实现如下功能: 动态生成新的类 动态改变某个类的结构(添加/删除/修改  新的属性/方法) 优势: 比反射开销小,性能高 JAVAasist性能高于反射,低于ASM 常见的字节码操作类库 BCEL 这是Apache Software Fundation的jakarta项目的一部分.BCEL是javaclassworking广泛使用的一种跨级啊,它可以让你深入JVM汇编语言进行类的操作的细节.BCEL与javassist

[译]深入字节码操作:使用ASM和Javassist创建审核日志

深入字节码操作:使用ASM和Javassist创建审核日志 原文链接:https://blog.newrelic.com/2014/09/29/diving-bytecode-manipulation-creating-audit-log-asm-javassist/ 在堆栈中使用Spring和Hibernate,您的应用程序的字节码可能会在运行时被增强或处理. 字节码是Java虚拟机(JVM)的指令集,所有在JVM上运行的语言都必须最终编译为字节码. 操作字节码原因如下: 程序分析: 查找应用

Java字节码操作开源框架简介

avassist  Javassist是一个开源的分析.编辑和创建Java字节码的类库.是由东京技术学院的数学和计算机科学系的 Shigeru Chiba 所创建的.它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态AOP框架. BCEL  Byte Code Engineering Library (BCEL),这是Apache Software Foundation 的Jakarta 项目的一部分.BCEL是 Java classwor

第五篇 java字节码操作

java动态性的两种常见的实现方式: ①字节码操作 ②反射 运行时操作字节码可以让我们实现如下功能: ①动态生成新的类 ②动态改变某个类的结构(添加.删除.修改  新的属性或方法) 优点: 比反射的开销小,性能高 Javassist性能高于反射,低于ASM BCEL(Byte Code Engineering Library): 是java classworking 广泛使用的一种框架,它可以让你深入JVM汇编语言进行类操作的细节.BCEL与Javassist有不同的处理字节码的方法,BCEL在

Dubbo源码分析(八):Javassist字节码技术生成代理

Java动态编程的作用:      通过配置生成代码,减少重复编码和维护成本 我们常用到的动态特性主要是反射,在运行时查找对象属性.方法,修改作用域,通过方法名称调用方法等.在线的应用不会频繁使用反射,因为反射的性能开销较大.其实还有一种和反射一样强大的特性,但是开销却很低,它就是Javassit. Javassit其实就是一个二方包,提供了运行时操作Java字节码的方法.大家都知道,Java代码编译完会生成.class文件,就是一堆字节码.JVM(准确说是JIT)会解释执行这些字节码(转换为机

Javassist字节码增强示例

概述 Javassist是一款字节码编辑工具,可以直接编辑和生成Java生成的字节码,以达到对.class文件进行动态修改的效果.熟练使用这套工具,可以让Java编程更接近与动态语言编程. 下面一个方法的目的是获取一个类加载器(ClassLoader),以加载指定的.jar或.class文件,在之后的代码中会使用到. [java] view plaincopy private static ClassLoader getLocaleClassLoader() throws Exception {

虚拟机字节码操作引擎-----基于栈的字节码解释引擎

虚拟机调用方法可以有解析和分派两种方式,那么虚拟机是如何执行方法中的字节码指令的? 1.解释执行   谈是解释执行还是翻译执行没有意义了,只有确定了某种具体的java实现版本和执行引擎运行模式时,谈解释执行还是编译执行才比较贴切. 如今,基于物理机.java虚拟机,或者非Java的其他高级语言虚拟机的语言,大多都会遵循这种基于现代经典编译原理的思路,在执行前先对程序源码进行词法分析和语法分析处理,把源码转化为抽象语法树 .对于一门具体语言的实现来说,词法分析.语法分析以致后面的优化器和目标代码生

5.Dubbo原理解析-代理之Javassist字节码技术生成代理 (转)

转载自  斩秋的专栏  http://blog.csdn.net/quhongwei_zhanqiu/article/details/41597219 JavassistProxyFactory:利用字节码技术来创建对象 public <T> T getProxy(Invoker<T> invoker,Class<?>[] interfaces) { return (T) Proxy.getProxy(interfaces).newInstance(new Invoke

JAVA 字节码操作利器javassist

引用:http://blog.csdn.net/hudashi/article/details/50884742 http://blog.csdn.net/haitaofeiyang/article/details/44264685