Javassist 对比。 Java 编译器 API
在我目前正在进行的一个项目中,我需要在运行时生成Java类。 稍后在使用这些类时我还需要避免使用反射。
我一直在寻找当前的解决方案来执行此操作,并找到了 Javassist 和 Java 6 Java Compiler API。
但我很困惑:
Javassist 使用什么来生成 课程?它使用反射还是 什么?
我编写了一些测试代码并找到了它 很容易生成字节码 从源代码,然后加载 生成的字节码中的类。 使用有什么好处 Javassist 超过这个解决方案?
In a project I'm currently working on, I need to generate Java classes at runtime.
I also need to avoid using reflection when using these classes later on.
I've been search for current solutions to do this, and found Javassist and Java 6 Java Compiler API.
I'm confused though:
What does Javassist uses to generate
classes? Does it uses reflection or
something?I've coded some tests and found it
pretty easy to generate bytecode
from source code, and then load
classes from the generated bytecode.
What are the advantages of using
Javassist over this solution?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Javassist 有几个选项,其中一个是一个小型内置编译器,允许您将 Java 片段转换为字节代码,从而可以轻松插入“System.out.println(....)”或“log.debug(... )”现有类中的语句。
我不久前写了一篇关于此的文章,其中展示了如何做到这一点。请参阅http://blogs.oracle.com/CoreJavaTechTips/entry/add_logging_at_class_load。注意:对于生产环境,不应使用此方法 - 那么您应该考虑在应用程序中使用面向方面的编程。
Javassist has several options, one being a small included compiler allowing you to convert Java snippets to byte code, making it easy to insert e.g. a "System.out.println(....)" or "log.debug(...)" statement in existing classes.
I wrote an article on this a while back, which shows how it can be done. See http://blogs.oracle.com/CoreJavaTechTips/entry/add_logging_at_class_load. Note: For a production setting this approach should not be used - then you should consider using Aspect Oriented Programming in your application.