Pointcut аннотации AspectJ не запускается для аннотаций интерфейса

Как создать 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 будет работать, но в моем случае это не очень хорошее решение, поскольку аннотация является частью контракта и поэтому должна быть частью интерфейса, а не реализации.


person Lieven Doclo    schedule 06.07.2011    source источник
comment


Ответы (1)


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

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

person Leonard Brünings    schedule 06.07.2011
comment
Это не отвечает на вопрос, поскольку относится к аннотациям методов, а не к аннотациям классов. - person Hans-Peter Störr; 24.08.2011
comment
@hstoerr Я думаю, мы говорим об аннотациях методов - person Leonard Brünings; 25.08.2011
comment
вопрос касается аннотации к методу, @Inherited работает только с аннотацией класса. И даже не работает на интерфейсах! - person Hossein; 19.10.2015
comment
@Hossein Я никогда не говорил, что @Inherited решит проблему, я только процитировал, почему это не работает. - person Leonard Brünings; 19.10.2015
comment
@ LeonardBrünings, но то, что вы написали, не отвечает на вопрос! - person Hossein; 19.10.2015
comment
@Hossein, да, это так. Это объясняет, почему это не работает. Не на каждый вопрос есть положительный ответ. - person Leonard Brünings; 20.10.2015