목차
Spring AOP Pointcut 표현식 - this, target
Spring AOP Pointcut 표현식 - Advice 에 매게변수 전달
Spring AOP Pointcut 표현식 - bean
Spring AOP Pointcut 표현식 - @args
Spring AOP Pointcut 표현식 - @annotation
Spring AOP Pointcut 표현식 - @target, @within
Spring AOP Pointcut 표현식 - args
Spring AOP Pointcut 표현식 - within
Spring AOP Pointcut 표현식 - execution
Spring 핵심원리 고급편 - Pointcut
Pointcut 표현식 - args
args 는 메서드의 매개변수를 기준으로 AOP 를 적용
args는 메서드의 매개변수를 기준으로 매칭하기 위한 표현식입니다. 메서드의 매개변수 타입이나 값을 기준으로 특정 메서드에만 AOP를 적용할 수 있습니다.
테스트를 위한 객체@ClassAop@Componentpublic class MemberServiceImpl implements MemberService { @Override @MethodAop("test value") public String hello(String param) { return "ok"; } private String internal(String param) { return "ok"; }}
args 를 이용해 적용 여부 판단@BeforeEachpublic void init() throws NoSuchMethodException { helloMethod = MemberServiceImpl.class.getMethod("hello", String.class);}private AspectJExpressionPointcut pointcut(String expression) { AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut(); pointcut.setExpression(expression); return pointcut;}@Testvoid args() { // hello(String)과 매칭 assertThat(pointcut("args(String)") .matches(helloMethod, MemberServiceImpl.class)).isTrue(); // Object 는 String 의 상위 타입 assertThat(pointcut("args(Object)") .matches(helloMethod, MemberServiceImpl.class)).isTrue(); assertThat(pointcut("args()") .matches(helloMethod, MemberServiceImpl.class)).isFalse(); assertThat(pointcut("args(..)") .matches(helloMethod, MemberServiceImpl.class)).isTrue(); assertThat(pointcut("args(*)") .matches(helloMethod, MemberServiceImpl.class)).isTrue(); assertThat(pointcut("args(String,..)") .matches(helloMethod, MemberServiceImpl.class)).isTrue();}