在运行时生成Java接口的有效实现的最简单方法是什么?

时间:2011-07-14 22:08:32

标签: java interface code-generation

从一个Java基接口开始,我希望其他人能够直接或间接地扩展此接口,并将bean属性和行为添加到它作为插件系统。

然后,在运行时,在用户计算机上,我会找到所有这些接口并生成一个实现它们的大型类。 bean属性所需的字段将自动生成,而接口中定义的行为将实现为辅助类的静态方法(由插件开发人员创建),该方法将适当的接口作为第一个参数,因此实现interface方法将委托给静态方法,将“this”作为第一个参数传递。

这类似于Scala如何实现它的特性。

我看到了3种方法:

  1. 使用基于反射的Java动态代理。
  2. 将源代码生成为字符串,并在运行时进行编译。
  3. 使用一些字节码操作库在运行时生成类。
  4. 选项1是最简单但效率最低的,因此我想要一个更好的解决方案。选项2会给我一个有效的实现,但是相当丑陋。

    虽然我已经看过几个可以执行选项3的库,但它们似乎都要求我首先学习Java的汇编语言,这是一个非常耗时的活动,最后几乎没有什么好处。

    由于我不想学习任何汇编程序,JVM或其他,我最好选择2,或者有没有我使用JVM汇编程序可以生成动态代理的库?

2 个答案:

答案 0 :(得分:2)

看看Javassist。有了它,您可以使用直接API对类进行运行时更改。你不需要知道java“黑魔法”来使用它。

答案 1 :(得分:1)

使用BCEL时,您不必了解java汇编程序。乐于this proxy