Spring 핵심원리 고급편 - Spring 에서 제공하는 Pointcut

목차

참고

본 포스트는 김영한의 스프링 핵심 원리 - 고급편 내용을 참고해 만들었습니다.

save 메서드는 어드바이스 로직을 적용하지만, find 메서드에서는 어드바이스 로직을 적용하지 않도록 설정하기

Spring 에서 제공하는 Pointcut

가장 많이 사용하는 Pointcut 구현체는 AspectJExpressionPointcut 다.

클래스 설명
NameMatchMethodPointcut 메서드 이름을 기반으로 매칭한다. 내부적으로 PatternMatchUtils 을 사용한다.
JdkRegexpMethodPointcut JDK 정규 표현식을 기반으로 포인트 컷을 한다.
AnnotationMatchingPointcut 애노테이션으로 매칭한다.
AspectJExpressionPointcut aspectJ 표현식으로 매칭한다.
ServiceInterface target = new ServiceImpl();
ProxyFactory proxyFactory = new ProxyFactory(target);

// Spring 에서 제공하는 Pointcut
NameMatchMethodPointcut pointcut = new NameMatchMethodPointcut();
pointcut.setMappedNames("save");

// Advisor 인터페이스의 가장 일반적인 구현체
DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor(pointcut, new TimeAdvice());

// ProxyFactory 에 적용할 Advisor 를 지정한다.
proxyFactory.addAdvisor(advisor);
ServiceInterface proxy = (ServiceInterface) proxyFactory.getProxy();

proxy.save();
proxy.find();
00:14:12.347 [Test worker] INFO hello.proxy.common.advice.TimeAdvice - TimeProxy 실행
00:14:12.349 [Test worker] INFO hello.proxy.common.service.ServiceImpl - save 호출
00:14:12.349 [Test worker] INFO hello.proxy.common.advice.TimeAdvice - TimeProxy 종료 resultTime = 0
00:14:12.351 [Test worker] INFO hello.proxy.common.service.ServiceImpl - find 호출
Share