목차
- [Spring AOP] 포인트컷
- [Spring AOP] 포인트컷 표현식 - execution
- [Spring AOP] 포인트컷 표현식 - within
- [Spring AOP] 포인트컷 표현식 - Advice 에 매게변수 전달
- [Spring AOP] 포인트컷 표현식 - this, target
- [Spring AOP] 포인트컷 표현식 - bean
- [Spring AOP] 포인트컷 표현식 - @annotation
- [Spring AOP] 포인트컷 표현식 - @args
- [Spring AOP] 포인트컷 표현식 - @target, @within

포인트컷 표현식 - execution
execution( [접근제어자] 리턴타입 [선언타입] 메소드이름(파라미터) [예외] )
execution은 포인트컷 표현식에서 가장 많이 사용되는 지시자입니다.
메소드의 접근 제어자, 리턴 타입, 선언된 패키지 및 클래스, 파라미터, 예외 정보를 조합해 다양한 조건으로 포인트컷을 정의할 수 있습니다.
대괄호([ ])로 표시된 접근제어자, 선언타입, 예외는 생략이 가능합니다.
기본 사용 예시
execution(public String com.example.aop.member.MemberServiceImpl.hello(String)) |
| 구성 요소 | 값 |
|---|---|
| 접근 제어자 | public |
| 리턴 타입 | String |
| 선언 타입 | com.example.aop.member.MemberServiceImpl |
| 메소드 이름 | hello |
| 파라미터 | String |
| 예외 | 생략 |
모든 메소드를 대상으로 하는 포인트컷
모든 리턴 타입이나 메소드 이름을 대상으로 하려면 와일드카드 *를 사용하고, 0개 이상의 파라미터를 표현하려면 ..를 사용합니다.
execution(* *(..)) |
| 구성 요소 | 값 |
|---|---|
| 접근 제어자 | 생략 |
| 리턴 타입 | 모든 타입 |
| 선언 타입 | 생략 |
| 메소드 이름 | 모든 메소드 |
| 파라미터 | 0개 이상 |
| 예외 | 생략 |
execution - 메소드 이름 지정
execution( [접근제어자] 리턴타입 [선언타입] 메소드이름(파라미터) [예외] )
특정 메소드 이름을 명시하면 해당 메소드에만 Advice가 적용됩니다. *를 조합하면 이름이 특정 패턴으로 시작하거나 포함되거나 끝나는 메소드에도 적용할 수 있습니다.
// 메소드 이름이 정확히 hello인 경우 |
execution - 선언 타입 지정
execution( [접근제어자] 리턴타입 [선언타입] 메소드이름(파라미터) [예외] )
선언 타입은 패키지와 클래스 정보로 구성됩니다. 이를 활용해 특정 클래스, 패키지, 하위 패키지, 또는 상위 타입(인터페이스/추상 클래스)을 기준으로 Advice를 적용할 수 있습니다.
1. 특정 패키지 내 클래스 지정
패키지와 클래스를 명시하면 해당 클래스의 메소드에 Advice가 적용됩니다.
execution(* com.example.aop.member.MemberServiceImpl.hello(..)) |
2. 패키지 내 모든 클래스에 적용
클래스 위치에 *를 사용하면 해당 패키지의 모든 클래스에 Advice가 적용됩니다. 단, 하위 패키지는 포함되지 않습니다.
// com.example.aop.member 패키지 내 모든 클래스에 적용 |
3. 하위 패키지까지 적용
패키지 경로에 ..를 사용하면 하위 패키지의 클래스까지 Advice가 적용됩니다.
// com.example.aop.member 및 하위 패키지 모두 적용 |
4. 부모 타입 지정 (인터페이스 / 상위 클래스)
부모 타입을 지정하면 해당 타입을 구현하거나 상속한 자식 타입에도 Advice가 적용됩니다.
단, 부모 타입에 선언된 메소드에만 적용되며, 자식 타입에서 추가로 선언한 메소드는 포인트컷 대상이 되지 않습니다.
// MemberService(인터페이스)를 구현한 타입의 메소드에 적용 |
// MemberServiceImpl 에서만 선언된 internal() 메소드는 매칭되지 않음 |
execution - 파라미터 지정
execution( [접근제어자] 리턴타입 [선언타입] 메소드이름 (파라미터) [예외] )
파라미터 패턴을 통해 특정 타입, 개수, 조합의 파라미터를 가진 메소드에 Advice를 적용할 수 있습니다.
// String 타입 파라미터 하나를 가진 메소드 |