Point cut
2024. 11. 27. 15:07

@Pointcut("execution(* d*(int,int))")는 Spring AOP에서 사용되는 Pointcut 표현식입니다. 이 표현식은 AOP에서 어떤 메서드에 Advice(부가 기능)를 적용할지를 정의합니다. 여기서 execution(* d*(int,int))는 특정 메서드 실행 지점을 지정하는 Pointcut 표현식입니다. 각 부분을 하나씩 설명드리겠습니다.

1. Pointcut 애너테이션

@Pointcut은 Spring AOP에서 사용되는 애너테이션으로, 어떤 메서드에 Advice(부가기능)를 적용할지를 정의하는 **포인트컷(Pointcut)**을 선언하는 데 사용됩니다.

  • @Pointcut 애너테이션은 메서드에 적용되며, 해당 메서드는 Advice가 실행될 지점을 정의하는 Pointcut 표현식을 받아들입니다.

2. execution() 표현식

execution()은 AOP에서 주로 사용되는 JoinPoint(메서드 실행 지점)을 지정하는 표현식입니다. 이 표현식은 특정 메서드 실행 지점에 대해 Advice를 적용할 때 사용됩니다.

  • execution은 메서드 실행을 조인 포인트로 정의하며, 이 구문을 사용해 특정 조건을 만족하는 메서드가 실행될 때 부가기능을 적용할 수 있습니다.

3. * d*(int,int) 표현식 분석

execution(* d*(int,int))는 메서드 시그니처(메서드 이름과 파라미터 타입)에 대한 조건을 지정하는 부분입니다.

- *: 반환 타입

  • *은 모든 반환 타입을 의미합니다. 즉, 메서드의 반환 타입이 무엇이든 상관없이 적용됩니다.

- d*: 메서드 이름

  • d*는 메서드 이름이 "d"로 시작하는 모든 메서드를 의미합니다. *은 와일드카드로, "d"로 시작하는 메서드 이름 뒤에 어떤 문자든 올 수 있다는 의미입니다. 예를 들어 dMethod, dSomething 등 모두 포함됩니다.

- (int, int): 매개변수 타입

  • (int, int)는 메서드의 매개변수가 두 개의 int 타입이어야 한다는 조건을 나타냅니다. 즉, 메서드가 두 개의 int 타입 파라미터를 받을 때만 적용됩니다.

4. 전체 해석

따라서, @Pointcut("execution(* d*(int,int))") 표현식은 다음 조건을 만족하는 모든 메서드에 대해 Advice를 적용한다는 의미입니다:

  • 반환 타입은 무엇이든 상관없다.
  • 메서드 이름은 "d"로 시작해야 한다.
  • 메서드 파라미터는 정확히 두 개의 int 타입이어야 한다.

5. 예시

예를 들어, 아래와 같은 메서드들이 있다고 가정해봅시다:

public int dCalculate(int a, int b) {
    return a + b;
}

public void dPrint(int x, int y) {
    System.out.println(x + y);
}

public void anotherMethod(int a, int b) {
    System.out.println(a - b);
}

public void dLog(int a) {
    System.ou

 

이 경우, @Pointcut("execution(* d*(int,int))")는 다음 두 메서드에만 해당합니다:

  • dCalculate(int a, int b)
  • dPrint(int x, int y)

dLog(int a)는 매개변수가 하나뿐이므로 포함되지 않습니다. anotherMethod는 메서드 이름이 "d"로 시작하지 않기 때문에 제외됩니다.

6. 어떻게 사용되는지

이 @Pointcut을 정의한 후, 해당 포인트컷을 @Before, @After 또는 @Around와 같은 어드바이스 애너테이션과 결합하여 사용할 수 있습니다.

@Aspect
@Component
public class MyAspect {

    // Pointcut 정의
    @Pointcut("execution(* d*(int, int))")
    public void dMethodsWithTwoIntParams() {}

    // 해당 Pointcut에 Advice 적용
    @Before("dMethodsWithTwoIntParams()")
    public void beforeMethod() {
        System.out.println("d* 메서드 실행 전");
    }
}
 

위의 예시에서 beforeMethod()는 d*로 시작하고 두 개의 int를 파라미터로 받는 모든 메서드가 실행되기 전에 호출됩니다.

결론

@Pointcut("execution(* d*(int,int))")는 AOP에서 특정 메서드들에 부가기능을 적용하는 조건을 정의하는 표현식으로, "d"로 시작하는 메서드 이름과 두 개의 int 매개변수를 가진 메서드들에 대해 Advice를 적용할 수 있게 해줍니다.

'Back-End > Spring' 카테고리의 다른 글

WebSocket  (0) 2024.12.05
Flash Attributes / RedirectAttributes  (0) 2024.11.29
Spring AOP  (0) 2024.11.27
Spring - AutoWired  (0) 2024.11.27
Spring bean  (0) 2024.11.26