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引数に渡される