java agent
来源:互联网 发布:淘宝金牛 编辑:程序博客网 时间:2024/05/14 06:01
今天在项目开发的时候,碰到一个很有意思的插件 hotcode,此插件只有阿里集团内部的人才能获得。此插件最吸进我的地方就是可以支持热替换我们运行在服务器上的java class。在其简单的文档里面可以看到,原理就是用java agent实现的 感觉很好奇,于是乎就查阅了相关资料,发现资料并不是很多,仔细研究了一下,希望大家一起学习
这篇文章主要探讨了Java Agent。 Java Agent是拥有修改应用的一个软件组件。在agent的上下文中,instrumentation提供了重新定义和修改装载在运行时的类(class)的能力。我们将在下面几个部分详细探讨这方面的内容。
写第一个agent
本部分将详细探讨如何写出第一个自己的java agent。我们将尽可能简单的书写第一个简单的java agent,因为这一部分只是简单的介绍java agent的用法。编写一个agent需要写一个拥有静态的premain()方法的类,参考如下:
[java]
package net.javabeat.articles.javaagent.test; import java.lang.instrument.Instrumentation; public class TestJavaAgent { public static void premain(String agentArgument, Instrumentation instrumentation) { System.out.println("Test Java Agent"); } }
一个类要成为agent拥有上述的方法是必须的强制的。上面的agent除了向控制台打印一些简单的内容什么都没有做。
Manifest-Version: 1.0 Premain-Class: net.javabeat.articles.javaagent. test.TestJavaAgent
Agents需要被打包成jar文件并且通过 "javaagent"的jvm启动参数来启动应用使得应用可以感知agent的存在。注意,对于一个agent的jar文件拥有Premain—class的属性是有必要的,因为此属性制定了这个agent类的全路径名称。下面我们将使用这个agent做点事情,我们需要做点准备工作,首先我们需要创建一个简单的java类如下,注意,在应用运行的时候,我们调用这个agent,调用一个agent是通过jvm的参数指定的。
package net.javabeat.articles.javaagent.test; public class TestMain { public static void main(String[] args) { System.out.println("Test Main Class"); } }
创建一个名字为 test-agent.jar,并且把“net.javabeat.articles.javaagent.test.TestJavaAgent”和manifest文件“MANIFET.MF”
打开控制台,通过下面的命令启动应用和agent java -javaagent:test-agent.jar net.javabeat.articles.javaagent.test.TestMain
在控制台你将会看到如下的输出
Test Java Agent Test Main Class在这一部分中有一些事情需要注意: 第一:agent是通过传递给jvm参数来运行起来的。具体过程就是通过指定 javaagent参数 ,紧跟在javaagent后面的是指定这个jar文件的路径。第二:java agent 是在我们应用启动之前启动的,这里可以通过输出到控制台的内容得以证明。
作者:yuandunlong
- java agent
- Java与mobile agent
- java user agent utils
- java instrument agent
- java agent基础原理
- Java Agent调试
- Java Instrument(一) Java Agent
- java指定agent的参数
- Java Instrument (五) Agent attach
- Java Debugger JDWP Agent Library
- java解析user-agent参数
- ODI 创建Java EE Agent
- Java Agent与Native Agent的利与弊
- Open Source Agent Systems Written In Java
- Btrace 系列二 Java Agent and instrument
- JAVA Agent的原理和使用
- Java agent实现JVM exception 统计
- Java使用agent实现main方法之前
- 为GIT设置代理
- 并发控制
- 不同牙痛的诊疗方法
- 构造函数初始化列表
- switch… case 语句的用法
- java agent
- 水深则流缓,人贵则语迟
- 初学Struts2遇到的问题:org.apache.jasper.JasperException: /index.jsp(56,39) Unterminated <s:set tag
- 如何设置office2003为默认打开方式
- Processes and Threads
- [教程]ace player 软件搭配OpenWrt无线路由——简直是完美
- crontab定时
- Java String类型的长度问题
- Android中倒计时代码