모든 메소드의 호출 시간을 측정하고 싶을 때
간단하게 함수의 시작 부분과 끝 부분에 시간을 재는 방법이 있을 것이다.
공통 관심 사항 vs 핵심 관심 사항
회원 가입 시간, 회원 조회 시간을 측정하고 싶다면?
try 구문 실행 후 finally 구문이 실행된다.
package hello.hellospring.aop;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Component
@Aspect
public class TimeTraceAop {
@Around("execution(* hello.hellospring..*(..))")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
System.out.println("START: " + joinPoint.toString());
try {
return joinPoint.proceed();
} finally {
long finish = System.currentTimeMillis();
long timeMs = finish - start;
System.out.println("END: " + joinPoint.toString()+ " " + timeMs + "ms");
}
}
}
@Bean
public TimeTraceAop timeTraceAop(){
return new TimeTraceAop();
}
AOP 적용 전 의존관계
AOP 적용 후 의존관계
AOP가 프록시(가짜) memberService를 만들어내어 먼저 실행되도록 조작한다.