任何旧类的元模型生成器?

时间:2017-08-04 11:32:17

标签: java jpa metamodel

我发现JPA元模型生成器功能对于在列名更改时避免错误非常有用。如果有一些更通用的元模型生成工具可以指向可以生成类似元模型类的任何类(或许多包),那将是非常酷的。然后,当事情发生变化时,可以使用它来创建编译错误而不是运行时错误:

public class SomeClass {
  public int somePublicProperty;

  public String someStringMethod() {
    ..
  }
}

这可能会创建一个元模型类,如:

public class SomeClass_ {
  public static final FieldAttribute<SomeClass,Integer> somePublicProperty;

  public static final MethodAttribute<SomeClass,String> somePublicMethod;
}

其中FieldAttribute和MethodAttribute具有有用的类似属性的方法来协助反射调用(即删除需要裸字符串):

Object someClassInstance = ... 
Integer value = SomeClass_.somePublicProperty.get( someClassInstance );

// rather than 
Integer value = someClassInstance.getClass().getDeclaredField( "somePublicProperty" ).get( someClassInstance );

目前有类似的内容吗?现在我们可以在方法参考中使用Java 8中的一些支持,但是如果它存在的话,我想要一些更像元模型的东西。

1 个答案:

答案 0 :(得分:1)

我有这个需要几次,我已经实现了这个: https://github.com/mhagnumdw/bean-info-generator

以下使用方法

如果您正在使用Maven,请将其添加到pom.xml

<dependency>
    <groupId>io.github.mhagnumdw</groupId>
    <artifactId>bean-info-generator</artifactId>
    <version>0.0.1</version>
    <scope>compile</scope>
</dependency>

使用@GenerateBeanMetaInfo

注释您的类
import io.github.mhagnumdw.beaninfogenerator.GenerateBeanMetaInfo;
@GenerateBeanMetaInfo
public class SomeClass {
    private int someProperty;
}

构建运行时,会生成SomeClass_INFO.java和SomeClass_INFO.class

public abstract class SomeClass_INFO {
    public static final BeanMetaInfo someProperty = new BeanMetaInfo("someProperty");
}

现在你可以做这样的事情

Field field = SomeClass.class.getDeclaredField(SomeClass_INFO.someProperty.getName());

在Eclipse的开发时生成* _INFO.java

  • 右键点击项目&gt;特性
  • Java编译器&gt;注释处理&gt;工厂路径
  • 添加两个罐子:bean-info-generator-0.0.1.jar和javapoet-1.9.0.jar

我希望它有所帮助!