🎯 Pointcut Designator

정의

Pointcut DesignatorAOP에서 어떤 JoinPoint에 Advice를 적용할지 패턴으로 지정하는 표현식이다. 메서드, 클래스, 인자, 애너테이션 조건을 조합해 적용 대상을 좁힌다.

🧩 역할

  • Advice의 적용 대상을 지정한다
  • 메서드, 클래스, 인자 조건을 표현한다
  • 정밀한 AOP 적용 범위를 설정한다
  • AOP의 공통 로직을 필요한 지점에만 적용한다

🛠 주요 지시자

execution

  • 가장 많이 사용되는 지시자다
  • 메서드 실행을 기준으로 매칭한다
execution(* com.mvcvue.controller..*.*(..))

within

  • 특정 패키지나 클래스 범위를 지정한다
within(com.mvcvue.controller..*)

@annotation

  • 메서드에 붙은 애너테이션을 기준으로 매칭한다
@annotation(org.springframework.web.bind.annotation.GetMapping)

args

  • 메서드 인자 타입이나 값을 기준으로 매칭한다
@Around("args(arg)")
public Object aroundArgLogger(ProceedingJoinPoint joinPoint, String arg) throws Throwable {
    return joinPoint.proceed();
}

this

  • 프록시 객체 기준으로 매칭한다
@Around("execution(* com.mvcvue.controller..*.*(..)) && this(obj)")

target

  • 실제 대상 객체 기준으로 매칭한다
@Around("execution(* com.mvcvue.controller..*.*(..)) && target(targetObj)")

@target

  • 대상 객체 클래스에 붙은 애너테이션을 기준으로 매칭한다
@target(org.springframework.stereotype.Controller)

@within

  • 대상 타입 내부의 메서드에 적용한다
@within(org.springframework.stereotype.Controller)

🧩 특징

  • 조건을 조합해서 적용 범위를 세밀하게 지정할 수 있다
  • 메서드 실행 기준, 타입 기준, 인자 기준으로 나눠 생각하면 이해하기 쉽다
  • execution이 가장 범용적이다
  • 애너테이션 기반 매칭도 가능하다

⚠️ 주의사항

  • execution 패턴은 구조를 정확히 이해해야 한다.
  • thistarget은 프록시와 실제 객체의 차이를 알아야 한다.
  • 대소문자와 패키지 경로 오타에 주의해야 한다.
  • 너무 넓은 범위를 지정하면 원치 않는 곳까지 Advice가 적용될 수 있다.

📌 정리

  • Pointcut Designator는 AOP에서 Advice를 적용할 범위를 정하는 표현식이다.
  • execution, within, @annotation, args, this, target 등을 자주 사용한다.
  • 필요한 JoinPoint에만 공통 기능을 적용할 때 핵심적으로 쓰인다.

연결문서

댓글남기기