aop패키지 생성
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 // spring bean 과의 연결
@Aspect // AOP 어노테이션
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");
}
}
}
@Around("execution( hello.hellospring..(..))")
* hello.hellospring..*(..)
: 해당 패키지의 모든 클래스 내부의 메소드를 대상으로 AOP 로직을 진행한다.프록시 : 가짜 Serviec를 생성, 생성된 프록시가 실제 메서드를 실행시키는 방식