2015-01-14 44 views
0

已存在的註釋出現在類的頂部,正在刪除,而我使用Javassist添加的任何內容正在添加但沒有產生任何效果。Javassist覆蓋現有的註釋

假設

@Entity 
class Master 
{ 

     //variables 
    //getters and setters 
}  

我需要的是增加額外的註解@Table(name = 「大師」,模式= 「Master_Database」) 通過了Javassist添加動態上述類 '大師'。

我面臨的是@Entity被刪除,並且@Table被成功添加。 這會導致eclipseLink自動生成實體類的功能丟失。 PLZ幫我

回答

1

它應該是簡單的:

ctClass.getClassFile().addAttribute(attributeInfo); 

這不應該刪除現有的註釋。爲了進一步幫助您,我們需要知道您是如何添加註釋的。

但是你是否一定要使用Javassist?看看Byte Buddy(我的作者),這使得加註釋的相當容易鍛鍊; Tibial:

TypePool pool = TypePool.Default.ofClassPath(); 
TypeDescription type = pool.describe("name.of.class"); 
Class<?> enhanced = new ByteBuddy() 
    .redefine(type, ClassFileLocator.ForClassFile.ofClassPath()) 
    .annotation(new Table() { 
    ... 
    }) 
    .make() 
    .load(ClassLoader.getSystemClassLoader(), ClassLoadingStrategy.Default.WRAPPER) 
    .getLoaded(); 
+0

喜拉斐爾,感謝您的答覆.... ByteBuddy和Javassist是有助於動態而高效的添加註釋爲單個或兩班,但我有更多的班級,這是不高效的。無論如何謝謝拉斐爾,並感謝ByteBuddy的建議,非常棒。 – CaliCo