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