AOP Spring @AfterReturning неправильно вызывает метод аспектов - PullRequest
0 голосов
/ 15 апреля 2019

У меня есть аннотация.


@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface MyCustomAnnotation{

}

Мой класс Aspect такой


@Component
@Aspect
public class MyCustomAsspect{

    @AfterReturning(
            pointcut="@annotation(MyCustomAnnotation)",
            returning="retVal")
    public void publishMessage(JoinPoint jp, Object retVal) throws Throwable {


    }
}

Мой класс обслуживания

@Service
public class ServiceClass{

@MyCustomAnnotation
public Object someMethod(){
return new Object();
}

}

Выше упомянутые классы iЯ не уверен, почему мой аспект не работает.Я новичок в Spring AOP.Пожалуйста, помогите мне, это будет очень благодарно.

1 Ответ

1 голос
/ 15 апреля 2019

Проблема связана с объявлением pointcut. Как говорится в весенней документации

@ annotation - ограничивает совпадение для точек соединения, где предмет точка соединения (метод, выполняемый в Spring AOP) имеет аннотаций

Так что я приказываю сделать эту работу

@Aspect
public class MyCustomAsspect{

    @AfterReturning(
            pointcut="execution(public * *(..)) and @annotation(MyCustomAnnotation)",
            returning="retVal")
    public void publishMessage(JoinPoint jp, Object retVal) throws Throwable {


    }
}
...