2012-08-09 67 views
1

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

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

回答

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的文档。 http://docs.oracle.com/javase/6/docs/technotes/guides/instrumentation/index.html

0

我已成功使用Janino进行动态代码生成。像Javassist一样,它可以在内存中编译Java源代码。与Javassist一样,它也缺少Java 1.5语言功能,但除此之外,它很容易使用。

SimpleCompiler班是一个很好的起点。