Spring AOP: Getting parameters of the pointcut annotation
Bellow I'll add a complete example of AOP implementation where I'll getting parameter from my Custom pointCut annotation, where my advice aim to calculate the time execution of a function:
1- Custom Annotation:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AnnotationLogExecutionTime {
public boolean isActivate() default false;
}
2- Controller:
@AnnotationLogExecutionTime(isActivate = true)
@PostMapping("/connection")
public HttpEntity<String> createAuthenticationToken(HttpServletRequest request,
@RequestBody AuthenticationRequest authenticationRequest) {...}
3- Advice
@Component
@Aspect
public class LoggingExecutionTimeAdvice {
@Around("@annotation(annotationLogExecutionTime)")
public Object logExecutionTime(ProceedingJoinPoint joinPoint, AnnotationLogExecutionTime annotationLogExecutionTime) throws Throwable {
if(annotationLogExecutionTime.isActivate()){//Here I recover the value!!!!
long start = System.currentTimeMillis();
Object proceed = joinPoint.proceed();
long executionTime = System.currentTimeMillis() - start;
System.out.println(joinPoint.getSignature() + " executed in " + executionTime + "ms");
return proceed;
}
Object proceed = joinPoint.proceed();
return proceed;
}
}
Explanation:
Our advice (logExecutionTime) will be excuted around (joinPoint) the function that will be annotated with AnnotationLogExecutionTime (our custom annotation) so I want to active or not this the calculation of time execution so I'll get the value from the membre of our custom annotation (which you ask about ;) )
Change the advice signature to
@Around(value="@annotation(sampleAnnotation)")
public Object display(ProceedingJoinPoint joinPoint, SampleAnnotation sampleAnnotation ) throws Throwable {
// ...
}
and you will have access to the value in the annotation.
See docs for more info.