AspectJ аннотации pointcut не вызывается для аннотаций интерфейса - PullRequest
2 голосов
/ 06 июля 2011

Как можно создать pointcut, который соответствует методам, аннотированным аннотацией или чей интерфейсный метод аннотирован аннотацией?

public interface IService {
    @SomeAnnotation
    public void someMethod() { ... }
}

public class Service implements IService {
    public void someMethod() { ... }
}

Я использую Spring AOP для автоматического прокси AspectJ.Тем не менее, если я определяю pointcut, например

execution(public * *(..)) && @annotation(SomeAnnotation)

, совет не применяется к методу someMethod в Service.

Какой будет правильный pointcut, соответствующий этому методу, только с использованием фактачто метод интерфейса имеет аннотацию?Является ли это возможным?

Если я добавлю аннотацию к методу Service someMethod, вышеуказанный pointcut работает, но в моем случае это не очень хорошее решение, так как аннотация является частью контракта и поэтому должна быть частью интерфейса., а не реализация.

1 Ответ

1 голос
/ 06 июля 2011

В соответствии со спецификацией Java 5 аннотации, не относящиеся к типу, не наследуются, а аннотации к типам наследуются только в том случае, если они содержат метааннотацию @Inherited.

http://www.eclipse.org/aspectj/doc/released/adk15notebook/annotations-pointcuts-and-advice.html#annotation-inheritance-and-pointcut-matching

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