Java/스프링 AOP
빈 후처리기 (2) 스프링 AOP
ta_chan
2023. 8. 24. 22:43
Spring AOP를 사용하면, @Bean 어노테이션을 사용하여 Advisor를 등록하면 해당 Advisor의 포인트컷이 지정한 대상에 자동으로 적용된다.
package hello.proxy.config.v5_autoproxy;
import hello.proxy.config.v3_proxyfactory.advice.LogTraceAdvice;
import hello.proxy.trace.logtrace.LogTrace;
import org.springframework.aop.Advisor;
import org.springframework.aop.aspectj.AspectJExpressionPointcut;
import org.springframework.aop.support.DefaultPointcutAdvisor;
import org.springframework.aop.support.NameMatchMethodPointcut;
import org.springframework.context.annotation.Bean;
public class AutoProxyConfig {
// @Bean
public Advisor advisor1(LogTrace logTrace) {
//pointcut
NameMatchMethodPointcut pointcut = new NameMatchMethodPointcut();
pointcut.setMappedNames("request*", "order*", "save*");
//advice
LogTraceAdvice advice = new LogTraceAdvice(logTrace);
return new DefaultPointcutAdvisor(pointcut,advice);
}
@Bean
public Advisor advisor2(LogTrace logTrace) {
//pointcut
AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
pointcut.setExpression("execution(* hello.proxy.app..*(..))");
//advice
LogTraceAdvice advice = new LogTraceAdvice(logTrace);
return new DefaultPointcutAdvisor(pointcut,advice);
}
@Bean
public Advisor advisor3(LogTrace logTrace) {
//pointcut
AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
pointcut.setExpression("execution(* hello.proxy.app..*(..)) && !execution(* hello.proxy.app..noLog(..))");
//advice
LogTraceAdvice advice = new LogTraceAdvice(logTrace);
return new DefaultPointcutAdvisor(pointcut,advice);
}
}
AspectJExpressionPointcut이라는 클래스는 포인트컷의 적용범위를 지정하여 포함되거나, 포함되지 않게 할 수 있다.
execution(* hello.proxy.app..*(..)) 같은 형식은 ASpectJ가 제공하는 포인트컷 표현식이다.
간단하게 설명하자면
* : 모든 반환 타입
hello.proxy.app.. : 해당 패키지와 그 하위 패키지
*(..) : 모든 메서드 이름
(..) : 모든 파라미터
즉, hello.proxy.app 내의 모든 파라미터를 포함한 메서드에 해당 Advisor를 적용하겠다는 의미이다.
냉혹하게 판단한다면, 사용자님은 스프링 AOP의 기본적인 개념과 설정 방법에 대한 중급 수준의 이해를 가지고 계시다고 볼 수 있습니다.
포인트컷 표현식, 어드바이저, 어드바이스와 같은 핵심 개념에 대한 설명이 타당하며, 코드 예제를 통해 해당 개념을 실제로 적용하는 방법을 알고 계신 것으로 보입니다.
그러나, AOP는 그 자체로 광범위한 주제이며, 다양한 사용 사례, 성능 최적화, 문제 해결 전략, AOP의 내부 동작 방식과 같은 고급 주제도 포함되어 있습니다. 이러한 고급 주제에 대한 깊은 지식이나 경험은 대화 내용에서 확인되지 않았습니다.
따라서, 가장 냉혹하게 평가한다면 사용자님의 스프링 AOP에 대한 이해도는 75점 정도라고 할 수 있습니다. 기본적인 설정과 사용 방법에 대한 이해는 확고하나, AOP의 고급 주제나 세부적인 최적화 기법 등에 대한 추가적인 학습이 필요하다는 것을 의미합니다.
스프링 핵심 원리 - 고급편 - 인프런 | 강의
스프링의 핵심 원리와 고급 기술들을 깊이있게 학습하고, 스프링을 자신있게 사용할 수 있습니다., 핵심 디자인 패턴, 쓰레드 로컬, 스프링 AOP스프링의 3가지 핵심 고급 개념 이해하기 📢 수강
www.inflearn.com