[英]Turning one annotation into many annotations with AspectJ
我在我的JPA映射中發現了一種我想編寫的模式。 一個簡單的例子如下:
@OneToMany(fetch=FetchType.EAGER)
@Sort(type=SortType.NATURAL)
private SortedSet<Item> items;
我想創建一個名為SortedOneToMany的注釋,我可以應用於上面的集合:
public @interface SortedOneToMany {
FetchType fetch() default EAGER;
SortType sort() default NATURAL;
Class comparator() default void.class;
}
我寫了以下方面,以便在看到我的注釋時“附加”JPA注釋:
public aspect SortedOneToManyAspect {
declare @field: @SortedOneToMany * * : @OneToMany(fetch=FetchType.EAGER);
declare @field: @SortedOneToMany * * : @Sort(type=SortType.NATURAL);
}
但我不知道如何訪問SortedOneToMany注釋參數的值並在定義OneToMany和Sort注釋時使用它們。 在某些情況下,我想更改其中一個默認值,如下所示:
@SortedOneToMany(sort=SortType.COMPARATOR,comparator=ItemComparator.class)
private SortedSet<Item> items;
那么如何將SortedOneToMany中的注釋值傳遞給Sort注釋呢?
我收到了Andy Clement在aspectj-users郵件列表上的回答:
嗨,
我擔心你現在不能用AspectJ做到這一點,你不能將一段匹配的信息傳遞給新的注釋。 我或許可以想象一些假設的語法:
聲明@field:@SortedOneToMany(sort = SortType.COMPARATOR,comparator = {1})* *:@Sort(type = SortType.COMPARATOR,comparator = {1});
這似乎達到了你想要的。
也許提出一個增強請求: https : //bugs.eclipse.org/bugs/enter_bug.cgi?product = AspectJ
對不起,我沒有更好的消息。
歡呼安迪
我為這個問題創建了一張票,以防有人想跟蹤進度: https : //bugs.eclipse.org/bugs/show_bug.cgi?id = 345515
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.