java运行时类生成框架

时间:2014-06-02 09:06:58

标签: java java-compiler-api

我想拥有Java 8 for Java 7的一个特性:为方法自动生成接口实现(以避免因反射调用而导致的性能不足)。我知道Java 8在编译时提供了生成,但我认为Java 7不可能(没有维护元数据文件)。所以我同意在运行时生成实现。

示例:

我有以下界面:

public interface Extractor<E> {
  public Object getProperty(E aSourceObject);
}

和bean类(或接口)

public class Foo {
  public int getProperty1();
  public String getProperty2();
  public boolean getProperty3();
}

我需要为Foo的每个属性提供Extractor接口的实现。类似于{8}的Foo::getProperty1

public class Foo1Extractor implements Extractor<Foo> {
  public Object getProperty(Foo anObject) {
    return anObject.getProperty1();
  }
}

我应该使用JavaCompiler(目前我实现的界面很少,可以使用模板类)还是你有更好的解决方案?

主要要求是短字节码生成时间和LGPL兼容性(可用于商业产品)。

如果可能,请为我的案例提供一些示例。

1 个答案:

答案 0 :(得分:2)

如果使用生成的类替换反射,则可能看不到可见的性能改进,除非您的应用程序每秒执行数百万次操作。将动态代码生成添加到项目(在运行时和编译时)的复杂性也非常高。因此,我建议只有在反射被证明是真正的瓶颈时才能实现它。

无论如何,对于JDK 7中编译时的代码生成,您可以使用the annotation processing API,它基本上是javac的插件API,您可以将它与某种模板引擎结合使用。看看this项目,该项目利用注释处理的强大功能来做很好的事情。