부가 기능을 부여할 대상으로 클래스 위치, 어노테이션 등으로 지정할 수 있습니다.
AOP를 구현할 클래스에 지정하는 것입니다. Aspect 내부에 Advice와 Pointcut을 함께 가지고 있습니다.
Target Object에게 줄 부가기능을 말합니다.
프로그램 실행 로직에서 Advice가 적용될 수 있는 위치
Advice에 적용할 JoinPoint를 선별하는 작업과 기능을 정의한 모듈
몇몇 메서드의 실행 시간을 터미널에 로그를 남기는 것입니다.
로깅이라는 횡단 관심사를 처리해야하므로 어노테이션을 통한 AOP를 사용하여 처리할 계획입니다.
public @interface LogExecutionTime {
}
@Component
@Aspect
public class ExecutionTimeLogger {
@Pointcut("@annotation(LogExecutionTime)")
public void logExecutionTimePointcut() {}
@Around("logExecutionTimePointcut()")
public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object result = joinPoint.proceed();
long excutionTime = System.currentTimeMillis() - start;
System.out.printf("[%s] : %d", joinPoint.getSignature(), excutionTime);
return result;
}
}

기존 메서드에 LogExecutionTime이라는 어노테이션을 추가해주었습니다.
