> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/web/back-end/what-is-spring-framework/spring-aop/pointcut-expression.md).

# Pointcut Expression

이 문서에서는 Pointcut을 설정하기 위한 표현식에 대해 살펴본다.

## Pointcut이란

## Pointcut 정의 표현식 종류

* within : 특정 패키지 or 클래스의 모든 메소드를 지정
* target : 특정 인터페이스와 그의 자식 클래스의 메소드를 지정
* args : 특정 매개변수 형태를 갖는 모든 메소드를 지정
* this : 특정 인터페이스를 구현하는 프록시 객체를 지정
* execution : 표현식으로 형태를 지정하여 간섭

## 규칙

* `.*` 은 해당 패키지 전체를 의미
* `..*` 은 해당 패키지와 그 하위 패키지 전체를 의미

## execution 표현식

`execution` 은 다음과 같이 작성한다.

```
execution([접근제한]  반환형  패키지경로.클래스명.메소드명(매개변수형태)
```

* `execution(public int aaa.bbb.Test.hello())`
  * public 접근제한을 가지고 int 반환형을 갖는 aaa.bbb패키지의 Test클래스의 매개변수가 없는 hello()를 지정
* `execution(public int aaa.bbb.Test.hello(*))`
  * public 접근제한을 가지고 int 반환형을 갖는 aaa.bbb패키지의 Test클래스의 매개변수가 1개 이상인 hello()를 지정
* `execution(public int aaa.bbb.Test.hello(..))`
  * public 접근제한을 가지고 int 반환형을 갖는 aaa.bbb패키지의 Test클래스의 매개변수가 0개 이상인 hello()를 지정
* `execution(public int aaa.bbb.Test.hello(int))`
  * public 접근제한을 가지고 int 반환형을 갖는 aaa.bbb패키지의 Test클래스의 매개변수가 int 1개인 hello()를 지정
* `execution(public int aaa.bbb.Test.h*(..))`
  * public 접근제한을 가지고 int 반환형을 갖는 aaa.bbb패키지의 Test클래스의 매개변수가 0개 이상인 h로 시작하는 메소드 지정
* `execution(public int aaa.bbb.Test.*(..))`
  * public 접근제한을 가지고 int 반환형을 갖는 aaa.bbb패키지의 Test클래스의 모든 메소드 지정
* `execution(public int aaa.bbb.*.*(..))`
  * public 접근제한을 가지고 int 반환형을 갖는 aaa.bbb 패키지의 모든 클래스의 모든 메소드 지정
* `execution(public int aaa.*.*(..))`
  * public 접근제한을 가지고 int 반환형을 갖는 aaa 패키지의 모든 클래스의 모든 메소드 지정
* `execution(public int aaa..*.*(..))`
  * public 접근제한을 가지고 int 반환형을 갖는 aaa 패키지와 그 하위 패키지의 모든 클래스의 모든 메소드 지정
* `execution(public int *.*.*(..))`
  * public 접근제한을 가지고 int 반환형을 갖는 모든 메소드 지정
* `execution(public * *.*.*(..))`
  * 반환형까지 무관
* `execution(* *.*.*(..))`
  * 접근제한은 안써도 public
