Java-аннотация, которая расширяет / разрешает многие аннотации? - PullRequest
5 голосов
/ 09 сентября 2011

У меня есть набор аннотаций Java, которые я довольно часто использую, например:

@SomeAnnotation(Something)
@SomeOtherAnnotation
@SomeLastAnnotation(SomethingElse)
class Foo
{
    /* ... */
}

Поскольку я часто использую все эти аннотации вместе, и мне, возможно, придется добавлять их везде, где они используются время от времени, я хотел бы создать новую аннотацию, которую я мог бы использовать вместо этого. Затем эта аннотация должна «разрешиться» ко всем аннотациям, которые я где-то определяю.

@MySuperAnnotation
class Foo
{
    /* ... */
}

Как мне объявить @MySuperAnnotation таким, чтобы оно "разрешалось" ко всем другим аннотациям?

Ответы [ 3 ]

3 голосов
/ 09 сентября 2011

В общем, нет пути. Но если вы используете spring (> = 3.0), это возможно с помощью пользовательских аннотаций. Простой пример здесь .

2 голосов
/ 09 сентября 2011

Вы можете сделать это с AspectJ с помощью инструкции объявления аннотации: http://www.eclipse.org/aspectj/doc/released/adk15notebook/annotations-declare.html

, в вашем контексте это должно работать:

public aspect Declaration {
    declare @type: @MySuperAnnotation *: @SomeAnnotation(Something);
    declare @type: @MySuperAnnotation *: @SomeOtherAnnotation;
    declare @type: @MySuperAnnotation *: @SomeLastAnnotation(SomethingElse);
}
0 голосов
/ 09 сентября 2011

Вы не можете сделать это, не переписав все инструменты и код отражения, который ищет оригинальные аннотации.

(Или, как предполагает Оливер, вы можете постобработать скомпилированные файлы .class, чтобы заменить аннотации чем-то другим - я не знаю ни одного инструмента, который сделает это автоматически).

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