使用AspectJ将一个注释转换为多个注释

时间:2011-05-05 17:18:09

标签: java annotations 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注释呢?

1 个答案:

答案 0 :(得分:1)

我在sidej-users邮件列表上收到了Andy Clement的回答:

  

您好,

     

我担心你现在不能用AspectJ这样做,你不能通过   一段匹配的信息到新的注释。我也许   想象一些假设的语法:

     

宣布@field:   @SortedOneToMany(sort = SortType.COMPARATOR,comparator = {1})* *:   @Sort(类型= SortType.COMPARATOR,比较= {1});

     

这似乎达到了你想要的效果。

     

可能会针对它提出增强请求:   https://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ

     抱歉,我没有更好的消息。

     

欢呼声   安迪

如果有人想要跟进进度,我会为问题创建一张票:https://bugs.eclipse.org/bugs/show_bug.cgi?id=345515

相关问题