Search code examples
javaspringaopspring-aoppointcut

Spring AOP - pointcut for every method with an annotation


I am trying to define a pointcut, that would catch every method that is annotated with (i.e.) @CatchThis. This is my own annotation.

Moreover, I'd like to have access to the first argument of the method, which will be of Long type. There may be other arguments too, but I don't care about them.


EDIT

This is what I have right now. What I don't know is how to pass the first parameter of the method annotated with @CatchThis.

@Aspect 
public class MyAspect {
    @Pointcut(value = "execution(public * *(..))")
    public void anyPublicMethod() {
    }

    @Around("anyPublicMethod() && @annotation(catchThis)")
    public Object logAction(ProceedingJoinPoint pjp, CatchThis catchThis) throws Throwable {
        return pjp.proceed();
    }
}

Solution

  • Something like this should do:

    @Aspect
    public class MyAspect{
    
        @Pointcut(value="execution(public * *(..))")
        public void anyPublicMethod() {
        }
    
        @Around("anyPublicMethod() && @annotation(catchThis) && args(.., Long ,..)")
        public Object logAction(
            ProceedingJoinPoint pjp, CatchThis catchThis, Long long)
            throws Throwable {
    
            return pjp.proceed();
        }
    }