Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- jpa
- Servlet
- Thymeleaf
- 백준
- kotlin
- java
- 그리디
- db
- http
- JPQL
- 김영한
- 스프링 핵심 기능
- AOP
- JDBC
- Android
- spring
- Spring Boot
- transaction
- 인프런
- QueryDSL
- springdatajpa
- SpringBoot
- Greedy
- 자바
- 알고리즘
- 스프링
- Exception
- Proxy
- 스프링 핵심 원리
- pointcut
Archives
- Today
- Total
개발자되기 프로젝트
[스프링AOP 포인트컷] within 본문
within 지시자는 특정 타입 내의 조인 포인트에 대한 매칭을 제한한다.
쉽게 이야기해서 해당 타입이 매칭되면 그 안의 메서드(조인 포인트)들이 자동으로 매칭된다.
문법은 단순한데 execution 에서 타입 부분만 사용한다고 보면 된다.
1. Test
@Slf4j
public class WithinTest {
AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
Method helloMethod;
@BeforeEach
public void init() throws NoSuchMethodException {
helloMethod = MemberServiceImpl.class.getMethod("hello", String.class);
}
@Test
void withinExact(){
pointcut.setExpression("within(hello.aop.member.MemberServiceImpl)");
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
}
@Test //aop및 하위 패키지의 모튼 타입.
void withinSubPackage(){
pointcut.setExpression("within(hello.aop..*)");
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
}
}
- 그런데 within 사용시 주의해야 할 점이 있다.
- 표현식에 부모 타입을 지정하면 안된다는 점이다.
- 정확하게 타입이 맞아야 한다.
- 이 부분에서 execution 과 차이가 난다.
2. Test2
@Test
@DisplayName("타겟의 타입에만 직접 적용, 인터페이스를 선정하면 안된다.")
void withinSuperTypeFalse(){
pointcut.setExpression("within(hello.aop.member.MemberService)");
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isFalse();
}
@Test
@DisplayName("execution은 타입기반 인터페이스 선정 가능.")
void executionSuperTypeTrue(){
pointcut.setExpression("execution(* hello.aop.member.MemberService.*(..))");
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
}
부모 타입(여기서는 MemberService 인터페이스) 지정시 within 은 실패하고, execution 은 성공하는
것을 확인할 수 있다.
....타입을 딱 하나만 지정해야해서.. 잘 사용 안함..
3. GitHub: 220106 Within
'인프런 > [인프런] 스프링 핵심 원리 - 고급' 카테고리의 다른 글
[스프링AOP 포인트컷] @target, @within (0) | 2022.01.07 |
---|---|
[스프링AOP 포인트컷] args (0) | 2022.01.07 |
[스프링AOP 포인트컷] execution - 2 (0) | 2022.01.06 |
[스프링AOP 포인트컷] execution - 1 (0) | 2022.01.06 |
[스프링AOP 포인트컷] 예제코드 (0) | 2022.01.05 |
Comments