ソースコードをクラスファイルにコンパイルする前に、何かを追加したい(例:メソッドやフィールドの追加)。しかし、私はそれを行う方法がわかりません。それができる方法はありますか?
私はあるオープンソースプロジェクトLombokを知っています。それは、setterとgettersメソッドをクラスに自動的に追加でき、IDE(eclipse)は今すぐに新しく追加されたメソッドを見つけることができます。それで、誰かがそれがどのように達成したかを私に言うことができますか?
lombokのソース コードは github にあります。Afaikは、javacアノテーション処理機能の内部APIを使用しています。注釈プロセッサは、現在コンパイルされているファイルを変更することはできず、新しいファイルを作成できることのみが想定されています。型キャスト、クラスローダーへのパッチ適用、およびいくつかのメソッドのオーバーライドにより、lombok は現在コンパイル中の Java ファイルの抽象構文ツリーを変更し、メソッドまたはソース コードを追加できます。それは機能しますが、私はそれをハックと見なし、あまり依存しません。
作成したクラスファイルを変更したい場合は、cglibやasmなどのバイトコード書き換えフレームワークが、私の意見ではよりクリーンなソリューションです。