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的使用案例相关推荐

  1. java是面向对象还是面向过程_Java教程分享Java面向对象与面向过程

    Java教程分享Java面向对象与面向过程,面向对象: 是一种看待问题, 解决问题的思维方式, 着眼点在于找到一个能够帮助解决问题的实体, 然后委托这个实体来解决问题 面向过程: 是一种看待问题, 解 ...

  2. java 累进计费率计算_税点点分享第198期:案例解答个人所得税的计算公式

    工资所得的计算公式 应纳税所得额 = 税前工资 - 个税起征点 - 社保 - 专项附加扣除 - 其他依法扣除 应纳税额 = 累计应纳税所得额 * 预扣除税率 - 速算扣除数 - 已交个税 举例: 20 ...

  3. Jenkins 2.16.3默认没有Launch agent via Java Web Start,如何配置使用

    问题:Jenkins 2.16.3默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的. 如何设置才能让出来呢? 打开&quo ...

  4. 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一下的哈, ...

  5. java.lang.NullPointerException: Attempt to invoke virtual method ‘boolean java.lang.String.equals(j

    今天切正式环境出现的空指针 记录一下 下面是错误 java.lang.NullPointerException: Attempt to invoke virtual method 'boolean j ...

  6. Java每日一讲讲什么好_撩课-Java每天10道面试题第1天

    1.简述JDK.JRE.JVM? 一.JDK JDK(Java Development Kit) 是整个JAVA的核心, 包括了Java运行环境(Java Runtime Envirnment), 一 ...

  7. java编写代码用什么_如何学习用Java编写代码:为什么要学习以及从哪里开始

    java编写代码用什么 by John Selawsky 约翰·塞劳斯基(John Selawsky) 如何学习用Java编写代码:为什么要学习以及从哪里开始 (How to learn to cod ...

  8. java怎么打开_java开不了怎么办?java怎么打开?

    我们在打开java软件的时候,总是提示打不开,这可急坏了小伙伴,软件打不开,就无法写程序了,那么接下来,我们就来给大家讲解一下java开不了的解决方法. 1.先保证正确安装了JAVA环境. 2.再打开 ...

  9. java 用程序代码解释继承_关于初级java程序员笔试题

    关于初级java程序员笔试题 Sun 认证Java程序员考试内容涉及Java所有相关知识.编程概念及applet开发技巧.下面是小编整理的关于初级java程序员笔试题,欢迎大家参考! 第一题:判断题 ...

最新文章

  1. python 文件的操作
  2. vim windows版本_大概是篇Vim入门教程(1): 基本的一些东西
  3. Asp.net中一个页面多个表单的解决方案
  4. uvalive4744(数论)
  5. Spring-AOP底层实现
  6. swift 将图片保存到本地_如何保存微博的所有图片链接并下载图片到本地
  7. python实现k均值算法_python实现kMeans算法
  8. JAVA高并发服务器工作笔记0001---Java中InetAddress与InetSocketAddress的基本用法
  9. “极度郁闷,要求慰安”
  10. Effective Objective-C 2.0 Tips 总结 Chapter 3 Chapter 4
  11. avalon做的抽奖效果
  12. 服务器内存检测维修工具,使用edac工具来检测服务器内存故障.
  13. WiFi PowerSave模式以及通过抓包判断是否生效
  14. 全流程基于最新导则下的生态环境影响评价技术方法及图件制作
  15. 产品经理面试技巧及常见问题
  16. android 得到屏幕尺寸 状态栏尺寸 标题栏尺寸
  17. Linux 应用程序安装卸载
  18. P2123皇后游戏+P1080国王游戏
  19. css3 标点符号在首位,CSS 让标点符号不出现在行首
  20. 单片机全局变量 局部变量 堆与栈

热门文章

  1. Python_管理项目
  2. 【深度学习】全连接层的作用
  3. fatal error C1189: #error : Building MFC application with /MD[d]
  4. 深入理解 Java 内存模型 JMM
  5. SQL逻辑查询语句执行顺序
  6. Spring - Java/J2EE Application Framework 应用框架 第 16 章 通过Spring使用远程访问和web服务
  7. 鸟哥的Linux私房菜(服务器)- 第十章、申请合法的主机名
  8. 浅谈代码的执行效率(1):算法是关键
  9. Linux中包的管理与程序安装
  10. 世界地板大会姚红鹏的三问