1

我已经开始将我的服务器端 C# 应用程序移植到 Java。它所做的其中一件事是使用 CodeDOM 框架动态生成代码,将其编译为字节码,并在运行时加载类。还有一些场景我们使用表达式树来进行轻量级的动态生成方法。

我做了一些研究,我相信我最接近的是 Javaassist。如果有任何其他支持动态代码生成和编译的框架,我将不胜感激。我是 Java 世界的新人。

4

4 回答 4

0

有 Java 编译 API(例如,http://www.accordess.com/wpblog/an-overview-of-java-compilation-api-jsr-199/)。

如果您只需要评估表达式,请考虑任何 EL,例如 OGNL 或 MVEL。

Groovy、JRuby 和 Scala 是最主流的动态语言,它们提供了大量的选项,从简单的表达式求值到全面的 Java 交互。

于 2012-08-10T00:16:55.610 回答
0

修改类可以使用javaassit、asm、cglib(其实是依赖asm)、bcel等,其中我推荐asm,因为它更轻量级,性能更好。

使用 asm,您可以动态生成一些类。但是如果你想修改在jvm中运行的类,你必须使用Java Instrument API来重新转换已经存在的类。

您可以查看这篇论文以获取更多信息。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(或其他动态语言)。 维基文章

于 2012-08-10T00:10:21.427 回答