Pointcut Designator
🎯 Pointcut Designator
정의
Pointcut Designator는 AOP에서 어떤 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패턴은 구조를 정확히 이해해야 한다.this와target은 프록시와 실제 객체의 차이를 알아야 한다.- 대소문자와 패키지 경로 오타에 주의해야 한다.
- 너무 넓은 범위를 지정하면 원치 않는 곳까지 Advice가 적용될 수 있다.
📌 정리
Pointcut Designator는 AOP에서 Advice를 적용할 범위를 정하는 표현식이다.execution,within,@annotation,args,this,target등을 자주 사용한다.- 필요한 JoinPoint에만 공통 기능을 적용할 때 핵심적으로 쓰인다.
댓글남기기