Превращение одной аннотации во множество аннотаций с AspectJ - PullRequest
7 голосов
/ 05 мая 2011

Я обнаружил шаблон в моих отображениях 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 Ответ

1 голос
/ 23 мая 2011

Я получил этот ответ от Энди Клемента в списке рассылки aspectj-users:

Привет,

Боюсь, вы не можете сделать это с AspectJ прямо сейчас,Вы не можете передать часть соответствующей информации в новую аннотацию.Возможно, я могу представить некоторый гипотетический синтаксис:

объявления @field: @SortedOneToMany (sort = SortType.COMPARATOR, компаратор = {1}) * *: @Sort (type = SortType.COMPARATOR, компаратор = {1});

, который, кажется, достиг бы того, чего вы хотите.

Может быть, поднять запрос на улучшение: https://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ

извините, у меня нет хороших новостей.

ура Энди

Я создал заявку на выпуск на случай, если кто-то захочет следить за ходом: https://bugs.eclipse.org/bugs/show_bug.cgi?id=345515

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...