特定のメソッドに Java アノテーションを追加するために .class ファイルを変更する方法はありますか? 基本的に、jar ファイル内の各クラス ファイルのメソッドをトラバースし、特定のメソッドに注釈を付けたいと考えています。これは、jar ファイルの使用中は実行時ではないことに注意してください。むしろ、作業が完了したら、注釈を付けてクラス ファイルを変更したいと考えています。
私はソース コードにアクセスできるので、自動ソース コード修飾子があれば、それも同様に機能します...
特定のメソッドに Java アノテーションを追加するために .class ファイルを変更する方法はありますか? 基本的に、jar ファイル内の各クラス ファイルのメソッドをトラバースし、特定のメソッドに注釈を付けたいと考えています。これは、jar ファイルの使用中は実行時ではないことに注意してください。むしろ、作業が完了したら、注釈を付けてクラス ファイルを変更したいと考えています。
私はソース コードにアクセスできるので、自動ソース コード修飾子があれば、それも同様に機能します...
実際、これはAspectJの典型的なユースケースです。
declare @method : public * BankAccount+.*(..) : @Secured(role="supervisor")
直接バイトコード操作がより強力であることを認めますが、AspectJははるかにユーザーフレンドリーであり、何か間違ったことをしているときにすぐにコンパイラー警告を出します。
また、Load Time Weavingを使用する場合、ウィービングはクラスのロード時に行われるため、元のライブラリjarを変更しないでおくことができます。
参照:
1時間ほどグーグルで検索すると、この記事が表示され、私の質問に完全に答えているようです。ASMを使用してください。変更されたバイトコードを使用してクラスファイルを書き込むには、ClassWriterを使用します。
さて、それでは仕事に取り掛かる時間だと思います。:)