Javaagent の使用例を探してみると、ほとんどの場合、バイトコードを使用した例です。これらの例では、Javaassist などのサードパーティ ライブラリを使用しています。
私の知る限り、Java にはバイトコードを扱うための標準的な手段はなく、いずれにせよライブラリに頼る必要があります。
そのため、呼び出す前に、これらのライブラリを独自のカスタム クラスローダーで使用しようとしましたdefineClass()
。そしてもちろん、それは完璧にうまく機能しました。ClassFileTransformer
のメソッドで行う場合と同様に、バイトコードを同じ方法で変更できますtransform()
。
javaagents には別の便利な機能があり、それが主な機能であることを正しく理解していますか? まず第一に、javaagent はInstrumentation
オブジェクトを提供し、Java 仕様では、instrument
パッケージは主にバイトコードを操作するために使用されると述べているためです。instrument
しかし、独自のクラスローダを実装できる (パッケージが導入されるずっと前に実装できた) だけであるのに、なぜそれを行う必要があるのでしょうか?