Spring Aspect - Как определить, какой Pointcut запускает функцию - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу регистрировать контроллер и остальные пакеты по-разному.Я знаю, что могу использовать 2 отдельных метода для этого, но эти 2 метода очень похожи, поэтому я хочу добавить код для проверки, который бы выглядел примерно так

@Around("controllerPoint() || theRest()")
public Object log(ProceedingJoinPoint joinPoint) throws Throwable {
  if( called from controllerPoint() ) {
      execute this short section of code                     # (1)            
  }
// rest of code

Как бы выглядел этот код?

Кроме того, если после того, как я выполню (1) и захочу снова передать переменную этому же методу, когда она выполняется для других пакетов, как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2019

Вы можете получить имя метода из точки соединения:

@Aspect
@Configuration
public class TrackingConfig {

    @Around("execution(* your.package.Controller.*(..))")
    public Object doConcurrentOperation(ProceedingJoinPoint pjp) throws Throwable {
        String methodName = pjp.getSignature().getName();
        if ("theRest".equals(methodName)) {
            System.out.println("AROUND! theRest ");
        } else if ("controllerPoint".equals(methodName)) {
            System.out.println("AROUND! controllerPoint ");
        }
        return pjp.proceed();
    }
}
0 голосов
/ 25 сентября 2019

Вы можете вызвать метод, подобный приведенному ниже, который вернет имя вашего метода

joinPoint.getSignature().getName()
...