4

現在取り組んでいるプロジェクトでは、実行時に Java クラスを生成する必要があります。また、後でこれらのクラスを使用するときは、リフレクションを使用しないようにする必要があります。

これを行うための現在のソリューションを探していて、Javassist と Java 6 Java Compiler API を見つけました。

私は混乱しています:

  1. Javassist はクラスを生成するために何を使用しますか? リフレクションか何かを使用していますか?

  2. いくつかのテストをコーディングしましたが、ソース コードからバイトコードを生成し、生成されたバイトコードからクラスをロードするのは非常に簡単であることがわかりました。このソリューションよりも Javassist を使用する利点は何ですか?

4

1 に答える 1

6

Javassist にはいくつかのオプションがあります。その 1 つは、Java スニペットをバイト コードに変換できる小さな組み込みコンパイラで、「System.out.println(....)」や「log.debug(...)」などを簡単に挿入できます。 )" ステートメントを既存のクラスに追加します。

しばらく前にこれに関する記事を書きましたが、それはどのように行うことができるかを示しています。http://blogs.oracle.com/CoreJavaTechTips/entry/add_logging_at_class_loadを参照してください。注: 本番環境では、このアプローチを使用しないでください。その場合、アプリケーションでアスペクト指向プログラミングを使用することを検討する必要があります。

于 2010-08-03T14:52:14.033 に答える