1

サーバー側のC#アプリをJavaに移植し始めました。それが行うことの1つは、CodeDOMフレームワークを使用してコードを動的に生成し、それをバイトコードにコンパイルし、実行時にクラスをロードすることです。メソッドの軽量で動的な生成に式ツリーを使用したシナリオもあります。

私はいくつかの調査を行いましたが、私が最も近かったのはJavaassistだと思います。動的なコード生成とコンパイルをサポートする他のフレームワークがあれば幸いです。私はJavaの世界で新入社員です。

4

4 に答える 4

0

JavaコンパイルAPIがあります(たとえば、http://www.accordess.com/wpblog/an-overview-of-java-compilation-api-jsr-199/)。

式を評価する必要があるだけの場合は、OGNLやMVELなどのELを検討してください。

Groovy、JRuby、およびScalaは、単純な式の評価から本格的なJavaインタラクションまで、幅広いオプションを可能にする最も主流の動的言語です。

于 2012-08-10T00:16:55.610 に答える
0

クラスを変更するには、javaassit、asm、cglib(実際には、asmに依存します)、bcelなどを使用できます。その中でも、軽量でパフォーマンスが優れているため、asmをお勧めします。

asmを使用すると、いくつかのクラスを動的に生成できます。ただし、jvmで実行されているクラスを変更する場合は、JavaInstrumentAPIを使用して既存のクラスを再変換する必要があります。

詳細については、このペーパーを参照してください。http://www.cs.helsinki.fi/u/pohjalai/k05/okk/seminar/Aarniala-instrumenting.pdf

oracleのInstrumentに関するその他のドキュメント。 http://docs.oracle.com/javase/6/docs/technotes/guides/instrumentation/index.html

于 2012-08-10T01:48:31.783 に答える
0

Janinoを動的コード生成に使用することに成功しました。Javassistと同様に、Javaソースコードをメモリ内でコンパイルできます。また、Javassistと同様に、Java 1.5言語機能がありませんが、それ以外は使いやすいです。

SimpleCompilerクラスは良い出発点です。

于 2013-07-13T19:37:39.950 に答える
-1

jvmをターゲットにしたlisp(または他の動的言語)を調べます。 wiki記事

于 2012-08-10T00:10:21.427 に答える