簡體   English   中英

使用AspectJ將一個注釋轉換為多個注釋

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM