# javaagent 核心接口:**ClassFileTransformer** ```java public class MyClassTransformer implements ClassFileTransformer { /*实现ClassFileTransformer接口中的唯一方法。 *用于对类的转换,每加载一个类都会调用这个函数。 * classfileBuffer 是这个类的二进制形式,即所说的操作字节码就是操作这个字节数组。 */ public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { System.out.println("开始修改类" + className); return classfileBuffer; } } ``` 然后需要一个核心方法类似`main`,可以在任意名字的一个类中 ```java public class Premain { /* * 这个方法将在main函数被加载前执行。 * 通过addTransformer 加入 ClassFileTransformer的实现类。 * 方法签名不能变 */ public static void premain(String agentArgs, Instrumentation inst) { inst.addTransformer(new MyClassTransformer()); } } ``` 打成jar包,将`premain`函数所在类指定为`<Premain-Class>`。 ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifestEntries> <Premain-Class>com.wutj.demo.Premain</Premain-Class> </manifestEntries> </archive> </configuration> </plugin> </plugins> </build> ``` 在需要这个agent的java程序的jvm参数中添加: `-javaagent:{agentjar位置}` 更多参考https://www.ibm.com/developerworks/cn/java/j-lo-jse61/index.html