정의

Pointcut 지시자란?

어떤 메서드가 Aspect에 의해 가로채질 것인지 패턴으로 지정

메서드 선택

execution

  • 가장 많이 사용되는 지시자
  • **execution(<접근제한자> <반환타입> <패키지>.<패키지>.<클래스>.<메소드>(<인자>))**
  • <접근제한자> <반환타입> <패키지경로>.\.<메서드명>(<매개변수>)
  • 여기서 ..은 임의의 개수의 패키지 레벨이나 임의의 개수의 매개변수, * 는 임의의 문자열을 의미
  • <접근제한자> 항목은 생략이 가능하며 모든 접근 제한자를 지시한다.

example

// 메서드 직접 지정
execution(public String com.mvcvue.controller.api.hello.HelloController.hello())

// 반환타입 모두 포함, 함수명 패턴 적용
execution(public * com.mvcvue.controller.api.hello.HelloController.*ell*())

// 반환타입 모두 포함, 패키지 하위 모든 클래스, 함수명 패턴 적용, 파라미터 모두 포함
execution(public * com.mvcvue.controller.api.hello.*.*ell*(..))

// 모든 접근제한자, controller 하위 패키지의 모든 클래스의 모든 메서드 포함, 파라미터 모두 포함
execution(* com.mvcvue.controller..*.*(..))

within

  • execution에서 패키지와 클래스 부분만 사용

example

//com.mvcvue.controller 하위 모든 패키지의 모든 클래스
within(com.mvcvue.controller..*)

@target

  • 인스턴스의 모든 메서드를 Joinpoint로 적용
  • 즉 부모타입의 메서드까지 포함

example

@target(org.springframework.stereotype.Controller)

@within

  • 인스턴스의 모든 메서드를 Joinpoint로 적용
  • 해당 타입 내에 있는 메서드만 Joinpoint로 적용

example

@within(org.springframework.stereotype.Controller)

매개변수 전달

@annotation

  • Method의 Annotation 검색

example

@Around("@annotation(org.springframework.web.bind.annotation.GetMapping)")

args

  • 매칭되는 메서드에서 매개변수만 얻어올 때 사용

example

@Around("args(arg)")  
public Object aroundArgLogger(ProceedingJoinPoint joinPoint, String arg) throws Throwable{  
    System.out.println("arg : " + arg);  
    return joinPoint.proceed();  
}

this

  • 매칭되는 메서드에서 프록시 객체를 가져올때, 사용

example

@Around("execution(* com.mvcvue.controller..*.*(..)) && this(obj)")  
public Object aroundLogger(ProceedingJoinPoint joinPoint, Object obj) throws Throwable{  
    System.out.println("obj : " + obj);  
    return joinPoint.proceed();  
}

target

  • 매칭되는 메서드에서 실제 대상 객체를 가져올 때, 사용

example

@Around("execution(* com.mvcvue.controller..*.*(..)) && this(obj) && target(targetObj)")  
public Object aroundLogger(ProceedingJoinPoint joinPoint, Object obj, Object targetObj) throws Throwable{  
    System.out.println("obj : " + obj);  
    System.out.println("targetObj : " + targetObj);  
    return joinPoint.proceed();  
}

연결문서

태그:

카테고리:

업데이트:

댓글남기기