Javassist 对比。 Java 编译器 API

发布于 2024-09-12 15:03:58 字数 297 浏览 5 评论 0原文

在我目前正在进行的一个项目中,我需要在运行时生成Java类。 稍后在使用这些类时我还需要避免使用反射。

我一直在寻找当前的解决方案来执行此操作,并找到了 Javassist 和 Java 6 Java Compiler API。

但我很困惑:

  1. Javassist 使用什么来生成 课程?它使用反射还是 什么?

  2. 我编写了一些测试代码并找到了它 很容易生成字节码 从源代码,然后加载 生成的字节码中的类。 使用有什么好处 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:

  1. What does Javassist uses to generate
    classes? Does it uses reflection or
    something?

  2. 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

审判长 2024-09-19 15:03:58

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文