Spring

포인트컷 표현식

요리하다그만둠 2022. 8. 24. 17:07

포인트컷을 이용하면 어드바이스 메서드가 적용될 비즈니스 메서드를 정확하게 필터링할 수 있는데,

이때 다양한 포인트컷 표현식을 사용할 수 있습니다. 포인트컷 표현식은 메서드처럼 생긴 execution 명시자를 이용하며

execution 명시자 안에 포인트컷 표현식을 기술합니다. 전체적인 구조는 다음과 같습니다.

execution( * com.multicampus.biz.*Impl.get*(...)  )
* 	<- 리턴타입
com.multicampus.biz 	<- 패키지 경로
*Impl 	  <- 클래스명
get*(..)	 <- 메서드명 매개 변수

 

1. 리턴타입 지정

리턴타입 지정에서 가장 기본적인 방법은 ' * ' 캐릭터를 이용하는 것입니다.

표현식 설명
모든 리턴타입 허용
void 리턴타입이 void인 메서드 선택
!void 리턴타입이 void가 아닌 메서드 선택

 

2. 패키지 지정

패키지 경로를 지정할 때는 ' * ', '..' 캐릭터를 이용한다.

표현식 설명
com.springbook.biz 정확하게 com.springbook.biz 패키지만 선택
com.springbook.biz.. com.springbook.biz 패키지로 시작하는 모든 패키지 선택
com.springbook..impl com.springbook 패키지로 시작하면서 마지막 패키지 이름이 impl로 끝나는패키지 선택

 

3. 클래스 지정

클래스 이름을 지정할때는 ' * ', ' + ' 캐릭터를 이용한다.

표현식 설명
BoardServiceImpl 정확하게 BoardServiceImpl 클래스만 선택
*Impl 클래스 이름이 Impl로 끝나는 클래스만 선택
BoardService+ 클래스 이름 뒤에 '+'가 붙으면 해당 클래스로부터 파생된 모든 자식 클래스 선택, 인터페이스 뒤에 '+' 가 붙으면 해당 인터페이스를 구현한 모든 클래스 선택

4, 메서드 지정

메서드를 지정할 때는 주로 ' * ' 캐릭터를 사용하고 매개변수를 지정할 때는 ' .. '를 사용합니다.

표현식 설명
*(..) 가장 기본 설정으로 모든 메서드 선택
get*(..) 메서드 이름이 get으로 시작하는 모든 메서드 선택

 

5. 매개변수 지정

매개변수를 지정할 때는 ' .. ', ' * ' 캐릭터를 사용하거나 정확한 타입을 지정합니다.

표현식 설명
(..) 가장 기본 설정으로 '..' 은 매개변수의 개수와 타입에 제약이 없을을 의미
(*) 반드시 1개의 매개변수를 가지는 메서드만 선택
(com.springbook.user.UserVO) 매게변수로 UserVO를 가지는 메서드만 선택, 이때 클래스의 패키지 경로가 반드시 포함되어 있어야 함
(!com.springbook.user.UserVO) 매게변수로 UserVO를 가지지 않는 메서드만 선택
(Integer, ..) 한 개 이상의 매게변수를 가지되, 첫 번째 매게변수의 타입이 Inte-ger인 메서드만 선택
(Integer, * ) 반드시 두 개의 매게변수를 가지되, 첫 번째 매게변수의 타입이 Inte-ger인 메서드만 선택