6

コンパイル時に ASM のようなバイトコード操作ライブラリを使用することは可能ですか?

具体的には、Java のアノテーション処理 API を使用して、アノテーション付きのクラスにボイラープレートを多用するメソッドを実装したいと考えています。注釈プロセッサの実装は簡単ですが、実行.class時にファイルがまだ存在していないようProcessorです。別の方法はありますか?

4

3 に答える 3

2

コンパイル後のステップとしてクラスを強化および保存できるJavassist ( http://www.jboss.org/javassist )に興味があるかもしれません。

この記事では、拡張クラスを保存する方法について説明します: https://dzone.com/articles/implementing-build-time

特に、クラスを変更したら、次のようなことができます。

 compiledClass.writeFile("/tmp/modifiedClassesFolder");
于 2013-01-28T19:37:44.100 に答える
1

次のプロジェクトがそれを行っているので、それは可能であるはずです: Project Lombok

また:

Java 8 では、Java コンパイラ (javac) 用のプラグインを作成できる新しいメカニズムが導入されます。コンパイラ プラグインを使用すると、コード ベースを変更せずに javac に新しいフェーズを追加できます。新しい動作をプラグインにカプセル化し、他のユーザーが使用できるように配布できます。たとえば、javac プラグインを使用して次のことを行うことができます。

• コンパイル時のチェックを追加する

• コード変換を追加する

• ソース コードのカスタマイズされた分析を実行する

于 2013-01-28T20:40:15.897 に答える
-1

代わりに CGLib を使用する必要があります。CGLib を使用すると、メソッド インターセプターを使用してプロキシを追加し、インターセプターにボイラープレート コードを実装させることができます。別のオプションは、Javassist を見ることです。Javassist を使用すると、実際のテキスト (文字列) を使用して文字どおり新しいサブクラスを作成し、javassist にそれをバイトコードにコンパイルさせます。

于 2013-01-28T19:31:02.090 に答える