- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章java agent 使用及实现代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
java agent的作用 。
在字节码这个层面对类和方法进行修改的技术,能够在不影响编译的情况下,修改字节码。可以理解spring的aop技术 。
如何实现 。
1.实现javaagent需要实现premain方法 2.必须在manifest.mf文件中有premain-class 。
demo实现 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
agent
package
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);
// 使用全称,用于取得字节码类<使用javassist>
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
;
}
}
|
预加载类 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
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指定预加载类 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
<build>
<plugins>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-compiler-plugin</artifactid>
<configuration>
<source>
1.8
</source>
<target>
1.8
</target>
<encoding>utf-
8
</encoding>
</configuration>
</plugin>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-shade-plugin</artifactid>
<version>
3.0
.
0
</version>
<executions>
<execution>
<phase>
package
</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation=
"org.apache.maven.plugins.shade.resource.manifestresourcetransformer"
>
<manifestentries>
<premainclass>com.xueyou.demo.app</premain-
class
>
</manifestentries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
|
如何使用 。
这里有两种方式指定javaagent:
1)使用命令行:java -javaagent:xxx.jar ddd.jar 2)使用idea的vm option选项.
总结 。
以上所述是小编给大家介绍的java agent 使用及实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。
原文链接:https://segmentfault.com/a/1190000015765838 。
最后此篇关于java agent 使用及实现代码的文章就讲到这里了,如果你想了解更多关于java agent 使用及实现代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
功能介绍 agent.exe程序文件是一个类似Windows更新服务(wuauclt.exe,即Windows Update)的程序,它不是Windows系统的一部分。而是第三方软件公司发布的程序
我正在尝试查找 android 应用程序的用户代理。 该应用程序允许应用程序内浏览,所以我认为它必须有一个用于浏览的用户代理。 我怎么知道那是什么?我正在尝试使用该信息来运行该网站的桌面版本,使其看起
考虑以下代码: (let [slave-agent (agent 0) run-slave (fn [_] (println "running slave agent")) run-m
我最近遇到了“多代理计算”这个术语,但我不太明白它是什么。我读过一本关于它的书,但这并没有回答代理是什么的基本问题。 是否有人有指向一些引用的指针,该引用清晰简洁,并且在没有大量废话/营销言论的情况下
我有一个 java 代理,我可以从它调用另一个代理,通过它传递包含 NoteId 的参数,并使用该 NoteId,我能够成功地完成该文档的工作。直到这里一切都清楚了. 关于此的主要问题是,是否可以从当
SQL Server 2012 SP2 CU6 v-5592 我启动 SQL 服务和 SQL 代理服务;都开始OK。然后我在 Windows 2012 Ent(不是 R2)服务器上登录 SSMS,SQ
有一个应用程序我曾经在 Mozilla 中运行,但我决定使用 Chrome。我选择了BlahBlahBlahSafari.gwt.xml (包含 )在 Google/GWT Compile 的帮助下
这与我的第一个问题有关。我更新了所有代码。在我的 bot.js是: require('dotenv').config(); let ver = process.env.DISCORD_BOT; cli
在 OPA 中,很清楚如何查询 condition AND condition : values := { "value1": { "a": "one" }, "value2":
通过 User-Agent header 检测设备是否为 SmartTV 设备的任何常用方法/模式?可能正在搜索 TV 或其他内容? 请告知还有其他值得检测的电视相关平台吗? UPD:根据这个http
这就是我跑步时它返回给我的东西。我试图更新包,但仍然不起作用。我也试过重新安装Julia,这个包在重新安装后只会运行一次。然后我第二次跑步的时候。它将再次失败。我试着修复它已经很长时间了。。有人能帮我
我是 OPA(开放策略代理)的新手,正在尝试使用 REST API/v1/policies/{id} 创建新策略。有用!但是,OPA 服务器将其保存到内存中,并且在重新启动后我的所有策略都被删除了。我
我想在 K8sPSPCapabilities 约束模板中将一个容器列入白名单,但我在使用 rego 语言时遇到了一些困难。我想禁止除特定容器之外的所有容器的 NET_RAW 功能。如果有人能指出我正确
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
导入命令: “从rasa_core.agent导入代理” 给我以下错误 ----------------------------------------------------------------
我正在为 Eclipse Kepler 开发一个插件。将 @RunWith(JMockit.class) 添加到我的测试类会导致以下错误: JMockit: Reinitializing un
如何使用TD-AGENT-BIT将日志文件作为消息输出,可以是逐行输出,也可以是以“hh:mm:ss”开头的行输出,然后向下游发送,而不是每次一起输出多行日志?日志:。。。我想要下面这样的消息:。。。
我在 SQL Server 上有一个非常奇怪的情况,我无法理解。 环境:SQL Server 2012 SP3 CU3 在 2 节点 Windows 2008 R2 集群上运行 在 SQL Serve
有关该主题的所有其他问题都没有解决我的问题。 注入(inject)器: VirtualMachine vm = VirtualMachine.attach(pid); vm.loadAgent(new
[SSH]“无法打开与您的身份验证代理的连接”。错误 我正在尝试将 ssh key 添加到我的 ssh 代理中。我首先确保 ssh-agent 正在运行。 exec ssh-agent bash 我确
我是一名优秀的程序员,十分优秀!