본문 바로가기
Spring

[Spring/스프링] AOP의 포인트컷(Pointcut) execution() 표현식 사용법

by LasBe 2022. 4. 8.
반응형

⚡️포인트컷(Pointcut)


포인트컷이란 수많은 비즈니스 메소드 중에서

원하는 특정 메소드에게만 횡단 관심에 해당하는 공통 기능을 수행시키기 위해

클래스와 패키지, 메소드 시그니처를 이용해 메소드를 필터링하는 것입니다.

 

이 때 필터링을 위해서 포인트컷 표현식을 이리저리 활용해 공통 기능을 적용시킬 메소드들을 정밀하게 뽑아올 수 있습니다.

 

 

 

⚡️포인트컷 execution() 표현식


📌 표현식

포인트컷 표현식은 다음과 대게 다음과 같이 사용합니다.

  • execution( [리턴 타입] [패키지 경로] [클래스명].[메소드명]( [매개 변수] ) )

 

필요한 메소드를 정확히 뽑아오기 위해 위와 같이 5가지의 옵션을 설정해주어야 해서 굉장히 복잡해 보입니다.

 

하지만 제가 학습하면서 실제 사용했던 표현식을 위와 대조해서 보시면 어느정도 감이 잡히실거라 생각합니다.

  • execution(* ch05_obj.*Service.*(..))
    • 모든 리턴 타입 허용
    • ch05_obj 패키지
    • Service로 끝나는 클래스
    • 모든 메소드
    • 매개 변수의 개수, 타입에 제약 없음

 

이처럼 조합 가능한 제약 조건의 폭이 넓기 때문에 정교하게 포인트컷을 만들 수 있습니다.

 

그럼 사용방법은 비슷하지만 와일드카드( * , .. , + ) 사용법에서

조금씩 차이가 나는 조건들을 예제를 통해 하나씩 알아보겠습니다.

 

🔎 리턴 타입

표현식 설명
* 모든 리턴 타입
void 리턴 타입이 void인 메소드
!String 리턴 타입이 String이 아닌 메소드

 

🔎 패키지 

표현식 설명
com.springex.service com.springex.service 패키지만 선택
com.springex.service.. com.springex.service 패키지와 하위 패키지까지 모두 선택
com.springex.service..member com.springex.service 패키지의 하위 패키지 중 member인 패키지

 

🔎 클래스

표현식 설명
*Service 이름이 Service로 끝나는 클래스
MemberService+ 해당 클래스로부터 파생된 모든 클래스, 인터페이스도 포함

 

🔎 메소드

표현식 설명
*(..) 모든 메소드 선택
get*(..) get으로 시작하는 모든 메소드 선택

 

🔎 매개변수

표현식 설명
(..) 모든 매개 변수 선택
(*) 매개 변수가 1개인 메소드 선택
(com.springex.model.Member, *, ..) 반드시 2개 이상의 매개변수를 가지되 하나는 Member 객체,
나머지 하나는 모든 타입의 매개변수를 갖는다.
클래스의 객체를 매개변수로 사용할 땐 패키지 경로가 포함되어야 한다.

 

반응형

댓글


오픈 채팅