# 项目【myJavaAgent】
【MyJavaAgentAgentmain.java】
package com.chz.myJavaAgent;
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.IllegalClassFormatException;
import java.lang.instrument.Instrumentation;
import java.security.ProtectionDomain;
public class MyJavaAgentAgentmain
{
public static void agentmain(String agentArgs, Instrumentation inst)
{
System.out.println("agentmain");
inst.addTransformer(new CusDefinedClass(), true);
}
static class CusDefinedClass implements ClassFileTransformer {
@Override
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
System.out.println(String.format("tid=%s, agentmain transform: %s", Thread.currentThread().getId(), className));
return classfileBuffer;
}
}
}
在【pom.xml】里面添加
<build>
<plugins>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.4.1</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
<manifestEntries>
<Agent-Class>com.chz.myJavaAgent.MyJavaAgentAgentmain</Agent-Class>
<Can-Redefine-Classes>true</Can-Redefine-Classes>
<Can-Retransform-Classes>true</Can-Retransform-Classes>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
打包,运行【mvn install】
# 项目【myTest】
【MyTestAgentmain.java】
package com.chz;
public class MyTestAgentmain
{
public static void main(String[] args) throws IOException, AttachNotSupportedException, AgentLoadException, AgentInitializationException, InterruptedException
{
List<VirtualMachineDescriptor> vms = VirtualMachine.list();
for (VirtualMachineDescriptor vm : vms) {
System.out.println(String.format("thread=%s, id=%s, displayName=%s", Thread.currentThread().getId(), vm.id(), vm.displayName()));
if ("com.chz.MyTestAgentmain".equals(vm.displayName())) {
VirtualMachine machine = VirtualMachine.attach(vm.id());
machine.loadAgent("C:/git/chzopen/spring_cloud_study-master/myJavaAgent/target/myJavaAgent-1.0-SNAPSHOT.jar");
}
}
Thread.sleep(1000L);
System.out.println("这里结束了");
}
}
添加vm options【-Djdk.attach.allowAttachSelf=true】
运行【MyTestAgentmain.java】