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方式相关推荐

  1. java代理模式_Java代理

    java代理模式 本文是我们名为" 高级Java "的学院课程的一部分. 本课程旨在帮助您最有效地使用Java. 它讨论了高级主题,包括对象创建,并发,序列化,反射等. 它将指导您 ...

  2. java 行为模式_java – 模式匹配行为

    在像Java这样的语言中,您可以使用访问者模式模拟模式匹配行为. 您可以通过以下步骤执行此操作: >使用accept方法定义一个表示Animal的接口 >向Animal添加一些子类,并提供 ...

  3. java模板方法模式_Java中的模板方法模式

    java模板方法模式 模板方法模式是一种行为模式,建议在超类中更一般地定义算法. 该算法是在称为模板方法的方法中定义的. 子类仅定义更具体的算法步骤的实现. 使用这种设计模式的好处是,算法后面的任何更 ...

  4. java命令模式_Java中的命令设计模式

    java命令模式 在本教程中,我们将学习命令模式,这是一种重要的行为设计模式. 它具有一些重要的应用程序,例如在文本编辑器中实现撤消/重做功能. 在命令设计模式中,有一个命令对象位于发送方和接收方对象 ...

  5. java 模板模式_Java模板模式(Template模式)

    Java模板模式(Template模式) 下一节> Template模式定义:定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中. 其实Java的抽象类本来就是Template模式,因此使 ...

  6. java 设置模式_Java设计模式百例 - 调停者模式

    调停者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性的.这种模式提供了一个调停者类,用来充当"中心化"或"总线化"的角色,与各个 ...

  7. java策略模式_Java设计模式之策略模式详解

    本文实例为大家分享了Java策略模式,供大家参考,具体内容如下 1.策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(PolicyPattern). 定义如下: Def ...

  8. java method 创建_java中创建对象的5种方式

    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象.然而这里有很多创建对象的方法. Java中有5种创建对象的方法,下面列出例子还有他们的字节码: 使用n ...

  9. java原始模型模式_java设计模式--原始模型模式

    简介 原始模型模式属于对象的创建模式.通过一个原型对象来指明要创建对象的类型,然后用复制原型对象的方法来创建出更多同类型的对象. Java所有的类都是从java.lang.Object类继承来的,Ob ...

最新文章

  1. 在直播问题上,智能电视们不应该沉默
  2. cs架构使用webservice靠谱嘛_使用点评eimele亦餐哪些味道的好吃?口碑靠谱吗?急想知道!...
  3. MATLAB 求图像的极大值极小值,平均值
  4. 聚类Introducion
  5. 计算机基础:离散数学和完备性
  6. code blocks代码性能分析_记一次Python Web接口优化,性能提升25倍!
  7. python输入文字、成为字典_Python实现创建字典
  8. 微信云服务器有效期,关于云存储文件有效期问题总结
  9. 95-240-048-原理-State-StateBackend
  10. REST架构中的HTTP动词
  11. 点击MSFlexGrid数据控件的标题进行数据排序
  12. VM虚拟机,Linux系统安装tools过程遇到 what is the location of the “ifconfig” program
  13. 灾备行业最全常用术语
  14. linux中mysql忘记密码
  15. 人工神经网络评价法案例_人工神经网络评价法.
  16. SparkLink星闪技术之SLB概述
  17. 1.第三章 选择结构(一)
  18. 双粗虚线中间一条实线_道路中间一条白实线,一条白虚线平行,代表什么意思?...
  19. MySQL登录时出现 Access denied for user“xxx” ‘‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解决办法
  20. “解决Python软件包安装问题 - 修改pip源地址“

热门文章

  1. 【随笔 || 逐源·无限可能】
  2. 基于intel平台车载M12网管交换机方案,13路网口,支持bypass功能
  3. C# ini 操作类
  4. 计算机主机硬件部分组成,台式电脑主机的硬件组成部分简介
  5. 网站的护眼模式和夜间模式
  6. 【逻辑与计算机设计】数码系统和数字系统 | Digital systems and number systems
  7. 2022年第十三届蓝桥杯大赛湖南中医药大学第2场选拔赛(部分总结)
  8. 联想服务器启动很久才能进系统,Win10开机一直请稍后很久才进系统的两种解决方法...
  9. 软件质量管理体系 type:pdf_软件工程名词解释(单选、判断和简答)
  10. 面试宝典 | 不完全总结