Как сделать внедрение между типами в классах, которые имеют методы с определенной аннотацией? - PullRequest
0 голосов
/ 09 февраля 2011

Чтобы дать вам некоторый контекст: Я успешно использую aspectJ с проектами Android, и я написал аннотацию @Background, которую я применяю к методам, которые не могут блокировать основной поток пользовательского интерфейса. Эта аннотация перехватывается pointcut и кратким советом, который заботится о запуске кода в фоновом потоке и работе с ошибками в сети и уведомлением пользователя.

Что я хотел бы сделать дальше, это автоматически предоставить кнопку перезагрузки в меню для всех действий, которые имеют такие фоновые методы Это должно быть сделано путем переопределения метода со следующей подписью: public boolean onCreateOptionsMenu (Меню меню);

Действия, которые не выполняют фоновые операции, не должны иметь меню, и, следовательно, не отменять этот метод.

Итак, есть ли способ, чтобы aspectJ переопределял метод только в тех классах, которые имеют (по крайней мере) метод с определенной аннотацией?

Или есть более элегантное решение?

Спасибо, Карлос.

1 Ответ

0 голосов
/ 09 февраля 2011

Посмотрите на шаблон типа hasMethod (вы можете увидеть отчет об ошибке для использования).Вы должны быть в состоянии добавить интерфейс маркера к вашим типам, у которых есть метод (ы) с требуемой подписью, и затем представить onCreateOptionsMenu к нему.

...