2017년 3월 12일 일요일

Srping execution 표현식

- execution 명시자
: Advice를 적용할 메서드를 명시할 때 사용.
   
- 기본 형식

execution(수식어패턴? 리턴타입패턴 패키지패턴?이름패턴(파라미터패턴)
▶ 수식어 패턴
  - 생략가능한 부분.
  - public, protected 등이 옴.
▶ 리턴타입패턴
  - 리턴 타입을 명시
▶ 클래스이름 패턴, 이름패턴
  - 클래스 이름 및 메서드 이름을 패턴으로 명시.
▶ 파라미터패턴
  - 매칭될 파라미터에 대해서 명시.

- 특징
: 각 패턴은 '*'를 이용하여 모든 값을 표현.
: '..'을 이용하여 0개 이상이라는 의미를 표현.

- EX

▶ execution(public void set*(..))
  - 리턴 타입이 void이고 메서드 이름이 set으로 시작하고, 파라미터가 0개 이상인 메서드 호출.
▶ execution(* com.spring.chap.core.*.*())
  - com.spring.chap.core 패키지의 파라미터가 없는 모든 메서드 호출.
▶ execution(*.com.spring.chap.core..*.*(..))
  - com.spring.chap.core 패키지 및 하위 패키지에 있는 파라미터가 0개 이상인 메서드 호출.
▶ execution(Integer com.spring.chap.core.DevService.delete(..))
  - 리턴 타입이 Integer인 DevService 인터페이스의 delete() 메서드 호출.
▶ execution(* get*(*))
  - 이름이 get으로 시작하고 1개의 파라미터를 갖는 메서드 호출.
▶ execution(* get*(*, *))
  - 이름이 get으로 시작하고 2개의 파라미터를 갖는 메서드 호출.
▶ execution(* read*(Integer, ..))
  - 메서드 이름이 read로 시작하고, 첫 번째 파라미터 타입이 Integer이며, 1개 이상의 파라미터를 갖는 메서드 호출.

within 명시자
- 메서드가 아닌 특정 타입에 속하는 메서드를 Pointcut으로 설정할 때 사용.

EX
▶ within(com.spring.chap.core.DevService)
  - DevService인터페이스의 모든 메서드 호출.
▶ within(com.spring.chap.core.*)
  - com.spring.chap.core 패키지에 있는 모든 메서드 호출.
▶ within(com.spring.chap.core..*)
  - com.spring.chap.core 패키지 및 그 하위 패키지에 있는 모든 메서드 호출.

bean 명시자
- 스프링 빈 이름을 이용하여 Pointcut을 정의


EX

▶ bean(Dev)
: 이름이 Dev인 빈의 메서드 호출

▶ bean(*DevService)
: 이름이 DevService로 끝나는 빈의 메서드 호출

Share:

0 개의 댓글:

댓글 쓰기