기본 표현식 패턴
(접근제한자-패턴? 리턴타입-패턴 클래스이름패턴?메서드이름패턴(파라미터패턴))
// 모든 public 메서드
@Pointcut("execution(public * *(..))")
// com.example.service 패키지의 모든 메서드
@Pointcut("execution(* com.example.service.*.*(..))")
// com.example 패키지와 하위 패키지의 모든 메서드
@Pointcut("execution(* com.example..*.*(..))")
// UserService 클래스의 모든 메서드
@Pointcut("execution(* com.example.service.UserService.*(..))")
// find로 시작하는 모든 메서드
@Pointcut("execution(* *.find*(..))")
// String을 리턴하는 모든 메서드
@Pointcut("execution(String *.*(..))")
// 파라미터가 없는 메서드
@Pointcut("execution(* *.*())")
// String 타입 파라미터 하나만 받는 메서드
@Pointcut("execution(* *.*(String))")
// 첫 번째 파라미터가 String인 메서드
@Pointcut("execution(* *.*(String, ..))")
// 마지막 파라미터가 String인 메서드
@Pointcut("execution(* *.*(*, String))")
// Long 타입을 리턴하고 파라미터가 하나인 메서드
@Pointcut("execution(Long *.*(*))")
특정 타입(클래스/인터페이스) 내부의 모든 조인포인트 매칭
// UserService 클래스 내의 모든 메서드
@Pointcut("within(com.example.service.UserService)")
// com.example.service 패키지 내의 모든 클래스의 모든 메서드
@Pointcut("within(com.example.service.*)")
// com.example 패키지와 하위 패키지의 모든 클래스
@Pointcut("within(com.example..*)")
// Service로 끝나는 모든 클래스
@Pointcut("within(*Service)")
// 인터페이스 구현체들
@Pointcut("within(com.example.repository.UserRepository+)")
클래스에 특정 어노테이션이 붙어 있는 경우 모든 메서드 매칭
// @Service 어노테이션이 붙은 클래스의 모든 메서드
@Pointcut("@within(org.springframework.stereotype.Service)")
// @Repository 어노테이션이 붙은 클래스의 모든 메서드
@Pointcut("@within(org.springframework.stereotype.Repository)")
// @Transactional 어노테이션이 붙은 클래스의 모든 메서드
@Pointcut("@within(org.springframework.transaction.annotation.Transactional)")
// 커스텀 어노테이션
@Pointcut("@within(com.example.annotation.Auditable)")
특정 어노테이션이 붙은 메서드만 매칭
// @Transactional이 붙은 메서드만
@Pointcut("@annotation(org.springframework.transaction.annotation.Transactional)")
// @PostMapping이 붙은 메서드만
@Pointcut("@annotation(org.springframework.web.bind.annotation.PostMapping)")
// 여러 어노테이션 조합
@Pointcut("@annotation(GetMapping) || @annotation(PostMapping)")
// 커스텀 어노테이션
@Pointcut("@annotation(LogExecutionTime)")
실제 대상 객체가 특정 타입인 경우 매칭
// 실제 객체가 UserService 타입인 경우
@Pointcut("target(com.example.service.UserService)")