【问题标题】:Turning one annotation into many annotations with AspectJ使用 AspectJ 将一个注释变成多个注释
【发布时间】:2011-05-05 17:18:09
【问题描述】:

我在我的 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 注释?

【问题讨论】:

    标签: java annotations aspectj


    【解决方案1】:

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

    嗨,

    恐怕你现在不能用 AspectJ 做到这一点,你不能通过 一条匹配的信息到新的注释。我也许可以 想象一些假设的语法:

    声明@字段: @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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      相关资源
      最近更新 更多