ClassPool pool = ClassPool.getDefault();
CtClass ctclass = pool.get(className);
上面二行代码,在web容器下是拿不到Class对象,官方已经解释了,如下:
The default ClassPool returned by a static method ClassPool.getDefault() searches the same path that the underlying JVM (Java virtual machine) has. If a program is running on a web application server such as JBoss and Tomcat, the ClassPool object may not be able to find user classes since such a web application server uses multiple class loaders as well as the system class loader. In that case, an additional class path must be registered to the ClassPool. Suppose that pool refers to a ClassPool object:
修改成如下代码:
ClassPool pool = ClassPool.getDefault();
pool.insertClassPath(new ClassClassPath(this.getClass()));
CtClass ctclass = pool.get(className);
然后,把自己开发的agent文件,如:myagnet.jar,把该jar放入目标系统位置/WEB-INF/lib/下面一起发布到web容器。
myagent.jar的MANIFEST.MF配置文件:
Manifest-Version: 1.0
Premain-Class: XXXXXXXXXXXXXXX.client.XXXXAgent
Can-Redefine-Classes: true
Class-Path: dubbo-2.5.3.jar javassist-3.19.0-GA.jar
//这个文件最后一行必须是空
myagent.jar依赖这二个dubbo-2.5.3.jar javassist-3.19.0-GA.jar,这二个文件必须确保在/WEB-INF/lib下面存在
如果被注入的目标系统非web环境,那么这三个文件jar(myagent.jar、dubbo-2.5.3.jar、javassist-3.19.0-GA.jar)同一个位置即可。
在目标系统配置VM启动参数,增加如下一行:
-javaagent:D:\XXX\tomcat-7.0.52\webapps\项目名\WEB-INF\lib\myagent.jar
相关推荐
环境JDK1.8 IDEA项目 javaagent+javassist 下载后导入即可
agent+javassist结合写测试框架
JavaAgent Javassist 与 Asm JavaAgent 字节码动态编程项目
javassist+javaAgent探针, 实现jvm退出时打印线程栈日志,方便排查是哪个线程调用了退出,以及退出码
通过javaagent和javassist技术实现对java的ArrayList和HashMap的增强,在操作集合元素时判断集合元素个数, 当集合元素个数大于设置的上限时,抛出异常,终止此次操作,从而避免在集合元素过大导致OOM. #使用方式: ...
javassist实现代码注入,详细内容可以参考;https://blog.csdn.net/xiangzhihong8/article/details/83060674
JavaAgent技术的Demo,agentmain方式 采用Javaassist技术实现字节码修改,VirtualMachine技术实现运行时代码织入
JavaAgent 示例说明 ①、 javassist.iedis.crack.IedisCrack1和javassist.iedis.crack.IedisCrack2为使用...javaagent.sample.transformer.InjectPrintTransformer 演示了使用javaagent结合javassist匹配返回值为St
javaagent是一个简单优雅的java agent,利用java自带的instrument特性+javassist字节码编辑技术,实现了无侵入的方法级性能监控。相比于NewRelic或者开源的,以及阿里的,本工具主打的是简单,我们只记录每个方法的执行...
所以,在MVC模型里,Model不依赖于View,但是如此,因为有一些业务逻辑在View里实现了,导致要更改View也是比较困难的,至少那些业务逻辑是无法重用的。 MVP时代:在MVP里,Presenter完全把模型和视图进行了分离,...
开发工具 javassist-3.21.0-GA开发工具 javassist-3.21.0-GA开发工具 javassist-3.21.0-GA开发工具 javassist-3.21.0-GA开发工具 javassist-3.21.0-GA开发工具 javassist-3.21.0-GA开发工具 javassist-3.21.0-GA开发...
能够实现java包的重写,分析,java程序的利器,不会的可以网上搜索相关使用方法,也可以留言求助。内含java包及demo,使用时直接引用java包即可。
标签:javassist、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
标签:javassist、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
两套工具联合可以修改已编译好的class文件
标签:javassist、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 ...
标签:javassist、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
java agent demo, premain方式,使用javassist操作,运行请查看README
它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态AOP框架。 关于java字节码的处理,目前有很多工具,如bcel,asm。不过这些都需要直接跟虚拟机指令打交道。如果你不想了解...
标签:javassist、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 ...