Перехватывающий аспект пользовательской аннотации

Я пишу библиотеку/sdk, которая может перехватывать любые методы, аннотированные пользовательской аннотацией @Monitor. Код работает примерно так

@Monitor
public void methodA(String test)

И аспект, который перехватывает это, имеет выражение pointcut

@After("execution(@com.packageA.Monitor * *(..))")
public void intercept(final JoinPoint joinPoint){
...}

Этот код отлично работает, когда я описываю аспект в том же пакете, что и methodA. Однако, если я создам отдельную библиотеку и определю аспект, в котором она не сможет перехватить methodA . Любая помощь?

РЕДАКТИРОВАТЬ

В ответ на комментарий @Bond

@Component
@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface Monitor {

}

Версии Spring: spring-context - 4.1.7. Release aspectj - 1.6.5 Суть проблемы в том, что аннотация не будет использоваться в том же проекте. После компиляции он будет использоваться в другом проекте.

РЕДАКТИРОВАТЬ2

2-й проект, то есть тот, из которого этот аспект должен перехватываться, скомпилирован с использованием плагина aspectj maven.


person Abhiroop Sarkar    schedule 18.08.2015    source источник


Ответы (1)


Вам нужно обновить pointcut до @annotation(com.x.y.z.Monitor). (соответствующим образом исправьте имя пакета)

Таким образом, ваш аспект должен выглядеть примерно так, как показано ниже.

@After("@annotation(com.x.y.z.Monitor)") 
public void intercept(final JoinPoint joinPoint){
    ...
}

Посмотрите примеры для справки о различных доступных выражениях pointcut. Также прочитайте это в случае, если советник принимает аргумент(ы)

person Bond - Java Bond    schedule 19.08.2015
comment
При попытке вашего подхода он все еще не может перехватить этот метод. Плюс это выдает предупреждение в затмении, подобное этому advice defined in com.x.y.AspectName has not been applied [Xlint:adviceDidNotMatch] - person Abhiroop Sarkar; 19.08.2015
comment
okies .. пожалуйста, обновите вопрос с соответствующими конфигурациями, весенней версией и определением @Monitor аннотаций. Также опубликуйте полные журналы ошибок/предупреждений. - person Bond - Java Bond; 19.08.2015