spring core aop : pointcut - execution
This commit is contained in:
@@ -8,6 +8,8 @@ import org.springframework.aop.aspectj.AspectJExpressionPointcut;
|
|||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class ExecutionTest {
|
public class ExecutionTest {
|
||||||
|
|
||||||
@@ -24,4 +26,161 @@ public class ExecutionTest {
|
|||||||
// public java.lang.String com.example.aop.member.MemberServiceImpl.hello(java.lang.String)
|
// public java.lang.String com.example.aop.member.MemberServiceImpl.hello(java.lang.String)
|
||||||
log.info("helloMethod={}", helloMethod);
|
log.info("helloMethod={}", helloMethod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void exactMatch() {
|
||||||
|
// public java.lang.String com.example.aop.member.MemberServiceImpl.hello(java.lang.String)
|
||||||
|
pointcut.setExpression("execution(public String com.example.aop.member.MemberServiceImpl.hello(String))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void allMatch() {
|
||||||
|
pointcut.setExpression("execution(* *(..))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void nameMatch() {
|
||||||
|
pointcut.setExpression("execution(* hello(..))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void nameMatchPattern1() {
|
||||||
|
pointcut.setExpression("execution(* hel*(..))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void nameMatchPattern2() {
|
||||||
|
pointcut.setExpression("execution(* *el*(..))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void nameMatchFalse() {
|
||||||
|
pointcut.setExpression("execution(* nono(..))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void packageExactMatch1() {
|
||||||
|
pointcut.setExpression("execution(* com.example.aop.member.MemberServiceImpl.hello(..))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void packageExactMatch2() {
|
||||||
|
pointcut.setExpression("execution(* com.example.aop.member.*.*(..))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void packageExactFalse() {
|
||||||
|
pointcut.setExpression("execution(* com.example.aop.*.*(..))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void subPackageMatch1() {
|
||||||
|
pointcut.setExpression("execution(* com.example.aop.member..*.*(..))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
|
@Test
|
||||||
|
void subPackageMatch2() {
|
||||||
|
pointcut.setExpression("execution(* com.example.aop..*.*(..))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void typeExactMatch() {
|
||||||
|
pointcut.setExpression("execution(* com.example.aop.member.MemberServiceImpl.*(..))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void superTypeMatch() {
|
||||||
|
pointcut.setExpression("execution(* com.example.aop.member.MemberService.*(..))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void typeMatchInternal() throws NoSuchMethodException {
|
||||||
|
pointcut.setExpression("execution(* com.example.aop.member.MemberServiceImpl.*(..))");
|
||||||
|
|
||||||
|
Method internalMethod = MemberServiceImpl.class.getMethod("internal", String.class);
|
||||||
|
assertThat(pointcut.matches(internalMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void typeMatchNoSuperTypeMethodFalse() throws NoSuchMethodException {
|
||||||
|
pointcut.setExpression("execution(* com.example.aop.member.MemberService.*(..))");
|
||||||
|
|
||||||
|
Method internalMethod = MemberServiceImpl.class.getMethod("internal", String.class);
|
||||||
|
assertThat(pointcut.matches(internalMethod, MemberServiceImpl.class)).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String 타입의 파라미터 허용
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
void argsMatch() {
|
||||||
|
pointcut.setExpression("execution(* *(String))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 파라미터가 없어야 함
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
void argsMatchNoArgs() {
|
||||||
|
pointcut.setExpression("execution(* *())");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isFalse();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 정확히 하나의 파라미터 허용, 모든타입 허용
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
void argsMatchStar() {
|
||||||
|
pointcut.setExpression("execution(* *(*))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 개수와 무관하게 모든 파라미터, 모든타입 허용
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
void argsMatchAll() {
|
||||||
|
pointcut.setExpression("execution(* *(..))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* String 타입으로 시작, 개수와 무관하게 모든 파라미터, 모든타입 허용
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
void argsMatchComplex() {
|
||||||
|
pointcut.setExpression("execution(* *(String, ..))");
|
||||||
|
|
||||||
|
assertThat(pointcut.matches(helloMethod, MemberServiceImpl.class)).isTrue();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user