java.lang.instrument
java.lang.instrumentを使用したJavaAgentのメモ。JavaAgentを使用する事で割り込み処理を行う事が可能
Agentクラスを作成
import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.Instrumentation;
import java.lang.instrument.IllegalClassFormatException;
import java.security.ProtectionDomain;
public class SampleAgent implements ClassFileTransformer {
public static void premain(String arg, Instrumentation inst) {
System.out.println("premain");
inst.addTransformer(new SampleAgent());
}
public byte[] transform(ClassLoader cl, String cName, Class<?> clazz, ProtectionDomain pd, byte[] b) throws IllegalClassFormatException {
System.out.println("transform");
return null;
}
}
MANIFEST.MFを作成
Premain-Class: SampleAgent
これとSampleAgentクラスをJar化して、sample_agent.jarとして作成する
サンプル用クラスを作成
public class Client {
public static void main(String[] args) {
System.out.println("Hello!");
}
}
実行してみる
java -javaagent:sample_agent.jar=hoge Client
実行すると
premain
transform
Hello!
と表示される。上のコマンドのhogeはpremainメソッドのarg引数に渡される