// server.spring 패키지 및 하위 패키지에 속해있고, 이름이 Service르 끝나는 인터페이스의 파라미터가 0개 이상인 모든 메서드
@Pointcut("execution(* server.spring..*Service.*(..))")
표현식
설명
User
정확하게 User 클래스만 선택
*DTO
이름이 DTO 로 끝나는 클래스만 선택
BaseDTO+
클래스 이름 뒤에 '+'가 붙으면 해당 클래스로부터 파생된 모든 자식 클래스 선택, 인터페이스 이름 뒤에 '+'가 붙으면 해당 인터페이스를 구현한 모든 클래스 선택
(6) 메소드 지정
// 메서드 이름이 do 시작하고 파라미터가 2개인 모든 메서드
@Pointcut("execution(* do*(*, *))")
// server.spring 패키지 및 하위 패키지에 속해있고, 이름이 get으로 시작하는 파라미터가 0개 이상인 모든 메서드
@Pointcut("execution(* server.spring..*.get*(..))")
표현식
설명
*(..)
모든 메소드 선택
update*(..)
메소드명이 update로 시작하는 모든 메소드 선택
(7) 파라미터 지정
// find로 시작하고 Long 유형의 매개변수가 하나만 있는 모든 메소드
@Pointcut("execution(* *..find*(Long))")
// 매개변수 수에 관계없지만, Long 유형의 첫 번째 매개변수를 가진 메소드
@Pointcut("execution(* *..find*(Long,..))")
표현식
설명
(..)
타입에 무관한 0개 이상의 매개변수
(*)
반드시 1개의 매개변수를 가지는 메소드만 선택
(server.spring.domain.user.model.User)
매개변수로 User를 가지는 메소드만 선택. 꼭 풀패키지명이 있어야함
(!server.spring.domain.user.model.User)
매개변수로 User를 가지지않는 메소드만 선택
(Integer, ..)
한 개 이상의 매개변수를 가지되, 첫번째 인수는 Integer 타입으로 시작하고 나머지는 타입 무관
(Integer, *)
반드시 두 개의 매개변수를 가지되, 첫 번째 매개변수의 타입이 Integer인 메소드만 선택
// com.baeldung 패키지나 하위 패키지 내의 모든 유형과 일치
@Pointcut("within(com.baeldung.pointcutadvice.dao.FooDao)")
// com.baeldung 패키지나 하위 패키지 내의 모든 유형과 일치
@Pointcut("within(com.baeldung..*)")
// server.spring 패키지의 모든 메서드
@Pointcut("within(server.spring*)")
■
4. bean 명시자
// bean 이름이 userService 인 빈의 모든 메서드
@Pointcut("bean(userService)")
// bean 이름이 user 으로 시작하는 빈의 모든 메서드
@Pointcut("bean(user*)")
■
4. 포인트컷 표현식 결합
&& , || , !
@Pointcut("@target(org.springframework.stereotype.Repository)")
public void repositoryMethods() {}
@Pointcut("execution(* *..create*(Long,..))")
public void firstLongParamMethods() {}
@Pointcut("repositoryMethods() && firstLongParamMethods()")
public void entityCreationMethods() {}