"com.xyz.trading..*" vs "com.xyz.trading.*.*"
2025. 6. 11. 16:45ㆍSpring Framework/Aspect Oriented Programming with Spring
@Pointcut("within(com.xyz.trading..*)")
이 포인트컷 표현식은에서 "com.xyz.trading..*"
는 패키지 이름을 의미합니다. 구체적으로 설명드리면:
🔹 "within(com.xyz.trading..*)"
의미 분석
within(...)
:- 해당 타입이 속한 클래스의 전체 이름(qualified name)이 지정한 패턴에 속하는 경우에만 적용됩니다.
- 즉, 클래스가 특정 패키지에 존재할 때 포인트컷이 매칭됩니다.
"com.xyz.trading..*"
:com.xyz.trading
은 패키지 이름입니다...
은 하위 패키지까지 모두 포함한다는 의미입니다.*
은 모든 클래스를 의미합니다.
따라서, 이 포인트컷은 다음에 해당하는 모든 클래스에 정의된 메서드 실행 시점을 매칭합니다:
com.xyz.trading,
com.xyz.trading.order,
com.xyz.trading.order.impl,
등 trading 패키지와 그 하위 패키지에 있는 모든 클래스의 메서드들
🔸 예시
다음 클래스들은 모두 매칭됩니다:
package com.xyz.trading;
public class TradeService { ... }
package com.xyz.trading.order;
public class OrderService { ... }
package com.xyz.trading.order.impl;
public class OrderServiceImpl { ... }
🧠 참고
within()
은 클래스 자체가 특정 패키지에 속해 있어야 적용됩니다.- 만약 메서드 호출(call) 기준으로 포인트컷을 정의하고 싶다면,
execution()
을 사용해야 합니다.
@Pointcut("execution(* com.xyz.trading..*.*(..))")
이 포인트컷은 해당 패키지에 존재하는 클래스의 메서드 호출을 대상으로 합니다.
❌ "com.xyz.trading.*.*"
*
는 패키지나 클래스 이름에서 단일 요소를 의미합니다. (한 단계만 가능)"com.xyz.trading.*.*"
는 다음과 같은 구조를 정확히 요구합니다:
com.xyz.trading.[1단계 하위 패키지].[그 하위에 존재하는 클래스]
예를 들어 다음은 포함됩니다:
com.xyz.trading.order.OrderService // 가능 (order → OrderService)
com.xyz.trading.user.UserService // 가능 (user → UserService)
다음은 포함되지 않습니다:
com.xyz.trading.OrderService // ❌ 한 단계 부족
com.xyz.trading.order.impl.Service // ❌ 세 단계 이상
"com.xyz.trading.*.*"
는 정확히 2단계의 하위 구성 요소가 있는 패키지 구조만을 포함합니다.
📊 요약 비교
표현식 | 의미 | 포함되는 범위 |
---|---|---|
com.xyz.trading..* |
trading 및 모든 하위 패키지의 모든 클래스 | 깊이에 상관없이 전부 포함 |
com.xyz.trading.*.* |
정확히 두 단계 하위 패키지 및 그 안의 클래스 | trading.X.Y 구조만 포함 |
🧪 예시 비교
클래스 경로 | com.xyz.trading..* |
com.xyz.trading.*.* |
---|---|---|
com.xyz.trading.Foo |
✅ | ❌ |
com.xyz.trading.one.Foo |
✅ | ✅ |
com.xyz.trading.one.two.Foo |
✅ | ❌ |
com.xyz.other.Foo |
❌ | ❌ |
'Spring Framework > Aspect Oriented Programming with Spring' 카테고리의 다른 글
CGLIB + Objenesis를 사용하는 Spring (0) | 2025.06.15 |
---|---|
Objenesis (1) | 2025.06.11 |
@EnableAspectJAutoProxy (1) | 2025.06.09 |
Pointcut Expression 예제들 (0) | 2025.06.07 |
Aspect Oriented Programming with Spring (1) | 2024.11.17 |