Превращение одной аннотации во множество аннотаций с помощью 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?

7
задан Adam Howard 5 May 2011 в 17:18
поделиться