java实现扫地agent_如何实现java agent?分享java agent的使用案例
java agent如何实现?1、实现java agent需要实现premain方法;2、必须在MANIFEST.MF文件中有Premain-Class。
在字节码这个层面对类和方法进行修改的技术,能够在不影响编译的情况下,修改字节码。可以理解spring的aop技术
java agent的作用
在字节码这个层面对类和方法进行修改的技术,能够在不影响编译的情况下,修改字节码。可以理解spring的aop技术
如何实现实现javaagent需要实现premain方法
必须在MANIFEST.MF文件中有Premain-Class
demo实现
agentpackage com.xueyou.demo.agent;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.CtNewMethod;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.security.ProtectionDomain;
public class FirstAgent implements ClassFileTransformer {
public final String injectedClassName = "com.xueyou.agentdemo.App";
public final String methodName = "hello";
public byte[] transform(ClassLoader loader, String className, Class> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
className = className.replace("/", ".");
// System.out.println(className);
if (className.equals(injectedClassName)) {
CtClass ctclass = null;
try {
ctclass = ClassPool.getDefault().get(className);// 使用全称,用于取得字节码类
CtMethod ctmethod = ctclass.getDeclaredMethod(methodName);// 得到这方法实例
ctmethod.insertBefore("System.out.println(11111111);");
return ctclass.toBytecode();
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
return null;
}
}
预加载类package com.xueyou.demo;
import com.xueyou.demo.agent.FirstAgent;
import java.lang.instrument.Instrumentation;
/**
* Hello world!
*/
public class App {
public static void premain(String agentOps, Instrumentation inst) {
System.out.println("=========premain方法执行========");
System.out.println(agentOps);
// 添加Transformer
inst.addTransformer(new FirstAgent());
}
}
maven指定预加载类
org.apache.maven.plugins
maven-compiler-plugin
1.8
1.8
utf-8
org.apache.maven.plugins
maven-shade-plugin
3.0.0
package
shade
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
com.xueyou.demo.App
如何使用
这里有两种方式指定javaagent:
1)使用命令行:java -javaagent:XXX.jar ddd.jar
2)使用idea的vm option选项。
相关文章:
相关视频:
java实现扫地agent_如何实现java agent?分享java agent的使用案例相关推荐
- java是面向对象还是面向过程_Java教程分享Java面向对象与面向过程
Java教程分享Java面向对象与面向过程,面向对象: 是一种看待问题, 解决问题的思维方式, 着眼点在于找到一个能够帮助解决问题的实体, 然后委托这个实体来解决问题 面向过程: 是一种看待问题, 解 ...
- java 累进计费率计算_税点点分享第198期:案例解答个人所得税的计算公式
工资所得的计算公式 应纳税所得额 = 税前工资 - 个税起征点 - 社保 - 专项附加扣除 - 其他依法扣除 应纳税额 = 累计应纳税所得额 * 预扣除税率 - 速算扣除数 - 已交个税 举例: 20 ...
- Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用
问题:Jenkins 2.16.3默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的. 如何设置才能让出来呢? 打开&quo ...
- java.lang.String cannot be cast to com.rock.bpo.agent.base.LoginUser
我在登录的时候遇见一个错误 java.lang.String cannot be cast to com.rock.bpo.agent.base.LoginUser 遇见错误肯定要debug一下的哈, ...
- java.lang.NullPointerException: Attempt to invoke virtual method ‘boolean java.lang.String.equals(j
今天切正式环境出现的空指针 记录一下 下面是错误 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean j ...
- Java每日一讲讲什么好_撩课-Java每天10道面试题第1天
1.简述JDK.JRE.JVM? 一.JDK JDK(Java Development Kit) 是整个JAVA的核心, 包括了Java运行环境(Java Runtime Envirnment), 一 ...
- java编写代码用什么_如何学习用Java编写代码:为什么要学习以及从哪里开始
java编写代码用什么 by John Selawsky 约翰·塞劳斯基(John Selawsky) 如何学习用Java编写代码:为什么要学习以及从哪里开始 (How to learn to cod ...
- java怎么打开_java开不了怎么办?java怎么打开?
我们在打开java软件的时候,总是提示打不开,这可急坏了小伙伴,软件打不开,就无法写程序了,那么接下来,我们就来给大家讲解一下java开不了的解决方法. 1.先保证正确安装了JAVA环境. 2.再打开 ...
- java 用程序代码解释继承_关于初级java程序员笔试题
关于初级java程序员笔试题 Sun 认证Java程序员考试内容涉及Java所有相关知识.编程概念及applet开发技巧.下面是小编整理的关于初级java程序员笔试题,欢迎大家参考! 第一题:判断题 ...
最新文章
- python 文件的操作
- vim windows版本_大概是篇Vim入门教程(1): 基本的一些东西
- Asp.net中一个页面多个表单的解决方案
- uvalive4744(数论)
- Spring-AOP底层实现
- swift 将图片保存到本地_如何保存微博的所有图片链接并下载图片到本地
- python实现k均值算法_python实现kMeans算法
- JAVA高并发服务器工作笔记0001---Java中InetAddress与InetSocketAddress的基本用法
- “极度郁闷,要求慰安”
- Effective Objective-C 2.0 Tips 总结 Chapter 3 Chapter 4
- avalon做的抽奖效果
- 服务器内存检测维修工具,使用edac工具来检测服务器内存故障.
- WiFi PowerSave模式以及通过抓包判断是否生效
- 全流程基于最新导则下的生态环境影响评价技术方法及图件制作
- 产品经理面试技巧及常见问题
- android 得到屏幕尺寸 状态栏尺寸 标题栏尺寸
- Linux 应用程序安装卸载
- P2123皇后游戏+P1080国王游戏
- css3 标点符号在首位,CSS 让标点符号不出现在行首
- 单片机全局变量 局部变量 堆与栈
热门文章
- Python_管理项目
- 【深度学习】全连接层的作用
- fatal error C1189: #error : Building MFC application with /MD[d]
- 深入理解 Java 内存模型 JMM
- SQL逻辑查询语句执行顺序
- Spring - Java/J2EE Application Framework 应用框架 第 16 章 通过Spring使用远程访问和web服务
- 鸟哥的Linux私房菜(服务器)- 第十章、申请合法的主机名
- 浅谈代码的执行效率(1):算法是关键
- Linux中包的管理与程序安装
- 世界地板大会姚红鹏的三问