java agent模式_Java Agent的agentmain和premain方式
agentmain方式
首先假如我们有个应用1启动类为task,
package com.st;
import java.lang.instrument.Instrumentation;
import java.util.Scanner;
public class Task {
public static void main (String[] args) {
Scanner scanner = new Scanner(System.in);
scanner.hasNext();
}
}
需要执行的代码
package com.st;
import java.lang.instrument.Instrumentation;
public class AgentMainTest {
public static void agentmain(String agentArgs, Instrumentation inst){
System.out.println("打印全部加载的类:");
Class[] allLoadedClasses = inst.getAllLoadedClasses();
for (Class allLoadedClass : allLoadedClasses) {
System.out.println(allLoadedClass.getName());
}
}
}
maven打包配置:
maven-jar-plugin
3.0.2
true
com.st.Task
com.st.AgentMainTest
打包成ks-demo-1.0-SNAPSHOT.jar,将其运行起来java -jar ks-demo-1.0-SNAPSHOT.jar
创建一个java类做应用2,导入jdk目录下的lib/tools.jar包,运行main方法
package com.st;
import com.sun.tools.attach.AgentInitializationException;
import com.sun.tools.attach.AgentLoadException;
import com.sun.tools.attach.AttachNotSupportedException;
import com.sun.tools.attach.VirtualMachine;
import java.io.IOException;
/**
* Hello world!
**/
public class App
{
public static void main( String[] args )
{
try {
//VirtualMachine 来自tools.jar
// VirtualMachine.attach("9444") 9444为线程PID
VirtualMachine vm = VirtualMachine.attach("9444");
//指定应用路径
vm.loadAgent("D:\\work\\ks-demo\\target\\ks-demo-1.0-SNAPSHOT.jar");
} catch (AttachNotSupportedException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (AgentLoadException e) {
e.printStackTrace();
} catch (AgentInitializationException e) {
e.printStackTrace();
}
}
}
该功能多用于收集系统信息,以及在系统加载后对class文件重新编辑等功能。
premain方式
package com.st;
public class Task {
public static void main (String[] args) {
System.out.println("mian执行");
}
}
package com.st;
import java.lang.instrument.Instrumentation;
public class AgentMainTest {
public static void premain(String agentArgs, Instrumentation inst){
System.out.println("premain执行:");
}
}
maven-jar-plugin
3.0.2
true
com.st.Task
com.st.AgentMainTest
运行命令:java -javaagent:ks-demo-1.0-SNAPSHOT.jar -jar ks-demo-1.0-SNAPSHOT.jar
运行结果:
premain在应用加载前执行,通常用于加载重新编辑类
java agent模式_Java Agent的agentmain和premain方式相关推荐
- java代理模式_Java代理
java代理模式 本文是我们名为" 高级Java "的学院课程的一部分. 本课程旨在帮助您最有效地使用Java. 它讨论了高级主题,包括对象创建,并发,序列化,反射等. 它将指导您 ...
- java 行为模式_java – 模式匹配行为
在像Java这样的语言中,您可以使用访问者模式模拟模式匹配行为. 您可以通过以下步骤执行此操作: >使用accept方法定义一个表示Animal的接口 >向Animal添加一些子类,并提供 ...
- java模板方法模式_Java中的模板方法模式
java模板方法模式 模板方法模式是一种行为模式,建议在超类中更一般地定义算法. 该算法是在称为模板方法的方法中定义的. 子类仅定义更具体的算法步骤的实现. 使用这种设计模式的好处是,算法后面的任何更 ...
- java命令模式_Java中的命令设计模式
java命令模式 在本教程中,我们将学习命令模式,这是一种重要的行为设计模式. 它具有一些重要的应用程序,例如在文本编辑器中实现撤消/重做功能. 在命令设计模式中,有一个命令对象位于发送方和接收方对象 ...
- java 模板模式_Java模板模式(Template模式)
Java模板模式(Template模式) 下一节> Template模式定义:定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使 ...
- java 设置模式_Java设计模式百例 - 调停者模式
调停者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性的.这种模式提供了一个调停者类,用来充当"中心化"或"总线化"的角色,与各个 ...
- java策略模式_Java设计模式之策略模式详解
本文实例为大家分享了Java策略模式,供大家参考,具体内容如下 1.策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(PolicyPattern). 定义如下: Def ...
- java method 创建_java中创建对象的5种方式
作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法. Java中有5种创建对象的方法,下面列出例子还有他们的字节码: 使用n ...
- java原始模型模式_java设计模式--原始模型模式
简介 原始模型模式属于对象的创建模式.通过一个原型对象来指明要创建对象的类型,然后用复制原型对象的方法来创建出更多同类型的对象. Java所有的类都是从java.lang.Object类继承来的,Ob ...
最新文章
- 在直播问题上,智能电视们不应该沉默
- cs架构使用webservice靠谱嘛_使用点评eimele亦餐哪些味道的好吃?口碑靠谱吗?急想知道!...
- MATLAB 求图像的极大值极小值,平均值
- 聚类Introducion
- 计算机基础:离散数学和完备性
- code blocks代码性能分析_记一次Python Web接口优化,性能提升25倍!
- python输入文字、成为字典_Python实现创建字典
- 微信云服务器有效期,关于云存储文件有效期问题总结
- 95-240-048-原理-State-StateBackend
- REST架构中的HTTP动词
- 点击MSFlexGrid数据控件的标题进行数据排序
- VM虚拟机,Linux系统安装tools过程遇到 what is the location of the “ifconfig” program
- 灾备行业最全常用术语
- linux中mysql忘记密码
- 人工神经网络评价法案例_人工神经网络评价法.
- SparkLink星闪技术之SLB概述
- 1.第三章 选择结构(一)
- 双粗虚线中间一条实线_道路中间一条白实线,一条白虚线平行,代表什么意思?...
- MySQL登录时出现 Access denied for user“xxx” ‘‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解决办法
- “解决Python软件包安装问题 - 修改pip源地址“
热门文章
- 【随笔 || 逐源·无限可能】
- 基于intel平台车载M12网管交换机方案,13路网口,支持bypass功能
- C# ini 操作类
- 计算机主机硬件部分组成,台式电脑主机的硬件组成部分简介
- 网站的护眼模式和夜间模式
- 【逻辑与计算机设计】数码系统和数字系统 | Digital systems and number systems
- 2022年第十三届蓝桥杯大赛湖南中医药大学第2场选拔赛(部分总结)
- 联想服务器启动很久才能进系统,Win10开机一直请稍后很久才进系统的两种解决方法...
- 软件质量管理体系 type:pdf_软件工程名词解释(单选、判断和简答)
- 面试宝典 | 不完全总结