복붙노트

[SPRING] Spring AOP : 포인트 컷 어노테이션의 매개 변수 얻기

SPRING

Spring AOP : 포인트 컷 어노테이션의 매개 변수 얻기

다음 측면을 정의했다고 생각하십시오.

@Aspect
public class SampleAspect {

    @Around(value="@annotation(sample.SampleAnnotation)")
    public Object display(ProceedingJoinPoint joinPoint) throws Throwable {
        // ...
    }
}

및 주석

public @interface SampleAnnotation {
    String value() default "defaultValue";
}

거기에 내 aspect 경우 표시 메서드에서 주석 SampleAnnotation의 값 매개 변수를 읽을 수있는 방법이 있나요?

당신의 도움을 주셔서 감사합니다, 에릭

해결법

  1. ==============================

    1.조언 서명 변경

    조언 서명 변경

    @Around(value="@annotation(sampleAnnotation)")
    public Object display(ProceedingJoinPoint joinPoint, SampleAnnotation sampleAnnotation ) throws Throwable {
        // ...
    }
    

    그러면 주석의 값에 액세스 할 수 있습니다.

    자세한 정보는 docs를 참조하십시오.

  2. ==============================

    2.Bellow 나는 AOP 구현의 전체 예제를 추가 할 것이다. 여기서는 사용자 정의 pointCut 어노테이션에서 매개 변수를 가져 오는데, 여기서 내 조언은 함수의 실행 시간을 계산하는 것을 목표로한다.

    Bellow 나는 AOP 구현의 전체 예제를 추가 할 것이다. 여기서는 사용자 정의 pointCut 어노테이션에서 매개 변수를 가져 오는데, 여기서 내 조언은 함수의 실행 시간을 계산하는 것을 목표로한다.

    1 - 사용자 정의 주석 :

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface AnnotationLogExecutionTime {
    
        public boolean isActivate() default false;
    
    }
    

    2- 컨트롤러 :

    @AnnotationLogExecutionTime(isActivate = true)
    @PostMapping("/connection")
    public HttpEntity<String> createAuthenticationToken(HttpServletRequest request,
                                                            @RequestBody AuthenticationRequest authenticationRequest) {...}
    

    3- 조언

    @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;
        }
    }
    

    설명:

    우리의 조언 (logExecutionTime)은 (joinPoint) AnnotationLogExecutionTime (우리의 커스터마이징 어노테이션)으로 주석을 달아주는 함수이므로, 실행 시키거나 실행하지 않기를 원한다. 그래서 우리는 우리의 membre에서 값을 얻을 것이다. 맞춤 주석 (당신이 물어 본다;))

  3. from https://stackoverflow.com/questions/5282242/spring-aop-getting-parameters-of-the-pointcut-annotation by cc-by-sa and MIT license