Следующий код получит значение PostMapping
@Around("@annotation(postMapping) && within(com.aop.example.web.controller..*)")
public Object postMapping(ProceedingJoinPoint jp,PostMapping postMapping) throws Throwable {
System.out.println(Arrays.asList(postMapping.value()));
return jp.proceed();
}
Объяснение:
Выражение Pointcut @Around("@annotation(postMapping) && within(com.aop.example.web.controller..*)")
можно объяснить следующим образом
- метод, помеченный
@PostMapping
и - в любом классе в пакете root
com.aop.example.web.controller
Для сопоставления сообщений, например @PostMapping(path = "api/postmethod")
, код аспекта должен быть изменен, чтобы получить postMapping.path()
Ссылку на документацию для «Передачи параметров в совет» можно прочитать здесь
Обновление:
Также обратите внимание, что объем следующего pointcut выражение является глобальным. Это может дать совет или нацелить вызов любого метода в приложении и обычно приводит к нежелательным результатам.
@After("execution(* *(..))")
Рекомендуется, чтобы область действия выражения pointcut была нацелена только на то, что требуется для оптимальных результатов.