2017-08-04 32 views
1

我發現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的支持,但是如果存在的話,我想要更多的元模型。

+0

Eclipse Dali會在編輯實體時動態生成相應的JPA元模型類。 –

+0

嗨布萊恩 - 我看着達利,它似乎只適用於JPA類。我追求的是一個通用的元模型生成器,它可以應用於* any類,而不僅僅是JPA @Entities。 – fancyplants

+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; 
} 
01類

當編譯運行,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()); 

生成* _INFO.java在開發時在Eclipse

  • 用鼠標右鍵單擊該項目>屬性
  • Java Co mpiler>註釋處理>工廠路徑
  • 添加兩個jar:豆信息 - 發電機 - 0.0.1.jar和javapoet-1.9.0.jar

我希望它能幫助!

+0

這看起來非常接近我正在尋找的東西,謝謝! – fancyplants