@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 |