一个最简单的javaagent demo实例

JavaAgent 是JDK 1.5 以后引入的,也可以叫做Java代理。

JavaAgent 是运行在 main方法之前的拦截器,它内定的方法名叫 premain ,也就是说先执行 premain 方法然后再执行 main 方法。

那么如何实现一个 JavaAgent 呢?很简单,只需要增加 premain 方法即可,后续可以在此基础上实现注入拦截,AOP等。

package com.xifj.agent.demo;
import java.lang.instrument.Instrumentation;/*** Created by uc on 2018/4/18.*/
public class agentDemo {/*** 该方法在main方法之前运行,与main方法运行在同一个JVM中** @param agentArgs* @param inst* @author xifeijian* @create  2018年4月18日*/public static void premain(String agentArgs, Instrumentation inst) {System.out.println("=========premain方法执行1========");System.out.println(agentArgs);}/*** 如果不存在 premain(String agentArgs, Instrumentation inst)* 则会执行 premain(String agentArgs)** @param agentArgs* @author xifeijian* @create  2018年4月18日*/public static void premain(String agentArgs) {System.out.println("=========premain方法执行2========");System.out.println(agentArgs);}
}

在这个 premain 函数中,开发者可以进行对类的各种操作。
1、agentArgs 是 premain 函数得到的程序参数,随同 “– javaagent”一起传入。与 main 函数不同的是,这个参数是一个字符串而不是一个字符串数组,如果程序参数有多个,程序将自行解析这个字符串。

2、Inst 是一个 java.lang.instrument.Instrumentation 的实例,由 JVM 自动传入。java.lang.instrument.Instrumentation 是 instrument 包中定义的一个接口,也是这个包的核心部分,集中了其中几乎所有的功能方法,例如类定义的转换和操作等等。

写完这个类后,我们还需要做一步配置工作,在 src 目录下生成 META-INF/MANIFEST.MF 文件



然后编辑META-INF/MANIFEST.MF,内容按如下定义:

要特别注意,最后一行是空行,还有就是Premain-Class冒号后面有个空格,例如:

Manifest-Version: 1.0
Premain-Class: com.xifj.agent.demo.agentDemo

然后我们打包代码为 javaagent.jar(Build-Artifact)




接着我们在创建一个带有main方法的主程序工程,截图如下: 

工程代码已完成,运行前配置VM参数:

-javaagent:D:\workspace\javaagent\out\artifacts\javaagent_jar\javaagent.jar=Hello -javaagent:D:\workspace\javaagent\out\artifacts\javaagent_jar\javaagent.jar=World


运行agentTest程序,得到以下结果:



也可以将agentTest打成jar包通过java命令行执行,我们通过 -javaagent 参数来指定我们的Java代理包,值得一说的是 -javaagent 这个参数的个数是不限的,如果指定了多个,则会按指定的先后执行,执行完各个 agent 后,才会执行主程序的 main 方法。命令如下:

java -javaagent:D:\workspace\javaagent\out\artifacts\javaagent_jar\javaagent.jar=hello1 -javaagent:D:\workspace\javaagent\out\artifacts\javaagent_jar\javaagent.jar=hello2 -jar D:\workspace\myTest\out\artifacts\myTest_jar\myTest.jar

执行结果和上图是完全一致的。

特别提醒:如果你把 -javaagent 放在 -jar 后面,则不会生效。也就是说,放在主程序后面的 agent 是无效的。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/72108.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国十大国民小吃,第一居然是它

编辑:叶不凡 中国是一个美食国度,全国知名地方小吃成千上万,每个地方都有属于自己的特色美食。我们总结出中国的“十大国民小吃”,各有特色,看看你家乡的小吃上榜了吗? 重庆酸辣粉排名第一 据阿里本地生…

普惠AI时代,抓住机遇奋力一搏

现在大家都在讨论AI,就如同当年互联网浪潮前夜一般。但不同的是,互联网浪潮来临之前,很多人看不清互联网是什么,它能干什么,所以很少有人会冒险的去尝鲜。但在当下,AI技术并未成熟,AI时代也并未…

中国最美的一千个汉字 : 千字文5

中国最美的一千个汉字 : 千字文5 具膳餐饭,适口充肠。 平时的饭菜,要适合口味,让人吃得饱。 image image image image image image image image 饱饫烹宰,饥厌糟糠。 饱的时候自然满足于大鱼大肉,饿的时候应当满足于粗…

中国最美的一千个汉字 : 千字文3

中国最美的一千个汉字 : 千字文3 背邙面洛,浮渭据泾。 洛阳北靠邙山,面临洛水,长安北横渭水,远据泾河。 image image image image image image image image 宫殿盘郁,楼观飞惊。 宫殿回环曲折,楼台宫阙凌空…

一专多能、刻意练习和终身成长

目录 缘起 什么是“一专多能” 什么是“刻意练习” 终身成长 最后 最后的最后 参考链接 本篇接上一篇《关于学习的三个终极问题》(以后简称它为“三个问题”) 缘起 如果说“三个问题”还有什么大遗憾的话,那就是它并没有提出问题的解…

这一年,这些书:2020年读书笔记

Note: 以下 markdown 格式文本由 json2md 自动转换生成,可参考JSON转Markdown:我把阅读数据从MongoDB中导出转换为.md了了解具体的转换过程。 面纱 作者:毛姆[英] ISBN:9787210082835 出版社:江西人民出版社 出版日…

计算机的历史——到底谁是第一台计算机?

(计算机的英文原词“computer”是指从事数据计算的人。而他们往往都需要借助某些机械计算设备或模拟计算机。) 沿着时间轴我们可以大概将计算机的发展历史分为四个阶段 目录 1.机械计算设备时代 1.1机械形式计算向电子式计算转变的一些关键点 1.1…

1.secureCRT注册机patch失败

电脑系统:win10专业版。我使用的是绿色版的secureCRT,注册机是配套的。什么是绿色版的secureCRT,也就是解压后无需安装可以直接使用的。 先说明,我这种情况,我在第一次的注册是成功的。 但是在我重装系统后就不行了。…

python自动修图_有码变高清!AI修图PULSE一秒还原马赛克

【实例简介】PULSE是一种新型超分辨率算法,它通过潜在空间探索对照片采样,可以将16x16像素的低分辨率(Low Resolution,简称LR)放大到1024x1024像素的高分辨率(High Resolution,简称HR&#xff0…

图片马赛克检测

视频在传输过程中,由于编解码出现问题,会导致视频出现不同程度的损伤,其中就包括视频马赛克现象。马赛克对于视频的观看效果有着很大的影响,为了及时有效地发现视频中是否存在马赛克,这里基于视频图像进行图像马赛克检…

“马赛克”真能去除了?老司机狂喜!

点击“开发者技术前线”,选择“星标” 让一部分开发者看到未来 有人说,马赛克的发明,就是人类文明史上一次重大的“开倒车”。 也有人说,马赛克就是阻碍人类进步的绊脚石。 从功能上讲,马赛克是一种用来遮盖原画面的手…

想给视频去色并加马赛克就用它

怎么才能在给大量视频去色的同时添加一个马赛克呢?其实这个很简单,今天小编就来教大家一个可以快速批量操作的简单方法,下面就一起来看看吧! 首先,打开浏览器搜索“固乔科技”,在固乔科技的官网里下载一个叫…

AI算法:马赛克照片都能还原成高清照

在这个追求高清画质的时代,我们对渣画质的容忍度越来越低。在网络上搜索「低分辨率」、「渣画质」,会看到一大片诸如「如何补救清晰度低的照片」、「如何拯救渣画质」之类的问题。那么,将渣到马赛克级别的画面秒变高清,是一种怎样…

再厚的马赛克都能被扒干净?这款开源「去码」神器火了

↑↑↑关注后"星标"简说Python人人都可以简单入门Python、爬虫、数据分析 简说Python推荐来源:扩展迷EXTFANSOne old watch, like brief python 有人说,马赛克的发明,就是人类文明史上一次重大的“开倒车”。 也有人说,…

【图像处理】马赛克

如何给一张图片打上马赛克呢? 马赛克原理 图像的马赛克效果是通过设置指定大小的像素块,并让这个像素块中的所有像素点设置为统一值来实现的。 方法一 手动制作马赛克 原理:这个过程有点像卷积的过程,如让这个像素块是10*10&a…

太可怕,有码变高清!AI 一秒还原马赛克?

作者 | 贝爽 转自:雷锋网(leiphone-sz) 论文地址:https://arxiv.org/pdf/2003.03808.pdf 像素不够,后期修图来凑? 在知乎搜索低像素修图,结果求助帖多到刷不完,而且从PS技巧、插件神…

计算机类相关比赛(大学生版)

大学生了,就要闷声干大事 提升专业技能:计算机类比赛基本上需要运用编程技巧、数据结构等专业知识,并锻炼团队协作和解决问题的能力。通过参与比赛,可以增强自己的专业技能水平和实际动手能力。 拓展视野:比赛可以为参…

分享五个计算机专业答辩ppt_附录csdn下载

一、基于javaEE网上商城管理系统的答辩ppt 基于javaEE网上商城管理系统答辩ppt-Java文档类资源-CSDN下载新颖的基于javaEE网上商城管理系统答辩ppt成品例子,往年的优秀答辩ppt成品更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/weixin_536…

计算机毕业答辩问题整理

我做的是个系统,排在后边没怎么问到技术性问题,前面同学有被问到。 之前总结的答辩问题没用上,所以给大家分享一下,适用于我的系统, 大家根据自己系统改一改。有用的话点个赞吧! 希望大家答辩顺利通过

【答辩问题】计算机专业本科毕业设计答辩指导

下面是总结的一些答辩期间的问题(结合论文中出现过的整理) 1、答辩一般流程是,演示PPT演讲,答辩老师问答,演示系统(具体咨询自己导师) 2、答辩老师一般不懂比较新的技术,只知原理&…