[Spring] AOP | AspectJ pointcut expression

no-brand·2021년 12월 21일
0

Spring

목록 보기
1/1

표현식

execution(* com.nobrand.calculator.ArithmeticCalculator.*(..))
  • 앞쪽의 와일드카드 (*) 는 modifier (public, protected, private) 와 리턴타입에 상관없음을 의미
  • 클래스명 뒤의 와일드카드는 함수명에 상관없음을 의미
  • (..) 두 점은 함수의 파라미터 개수에 관계없음을 의미
// modifier (public)
execution(public * com.nobrand.calculator.ArithmeticCalculator.*(..))

// 리턴타입 (double)
execution(public double com.nobrand.calculator.ArithmeticCalculator.*(..))

// 메소드 파라미터 (첫 번째 double 타입, 뒤는 몇 개라도 상관 없음)
execution(public double com.nobrand.calculator.ArithmeticCalculator.*(double, ..))

// 메소드 파라미터 (첫 번째, 두 번째 double 타입)
execution(public double com.nobrand.calculator.ArithmeticCalculator.*(double, double))

Annotation 활용법

// annotation 정의
@Target(ElementType.METHOD, ElementType.TYPE)
@Retenion(RetentionPolicy.RUNTIME)
@Documented
public @interface Logging { }

// annotation 을 이용한 pointcut (조건)
@Aspect
public class CustomPointcuts {
    
    @Pointcut(annotation(com.nobrand.Logging))
    public void loggingOperation() { }

}

필요한 메소드에 커스텀 애너테이션 (@Logging) 을 붙이고, Pointcut (조건) 은 해당 애너테이션을 체크합니다.

Reference

[1][AspectJ](https://www.eclipse.org/aspectj)

0개의 댓글