AOP 구성요소
- Aspect: 공통 관심사를 담는 Module
- Join Point: Method 실행 지점.
- Advice: 실행 시점에 따라 동작하는 AOP 로직(Method 전, 후, 전후 등).
- Pointcut: 어떤 Join Point에 어떤 Advice를 적용할지 지정해주는 것.
- Weaving
어노테이션
- @Aspect: 해당 Class가 AOP Class임을 선언해주는 Annotation입니다.
- @Around: Method 실행 전후에 AOP를 실행시키도록 지정합니다.
- @Before: Method 실행 전에만 AOP를 실행시키도록 지정합니다.
- @AfterReturning: 감시하는 Method가 Error 없이 정상적으로 Return 되었을 경우에만 실행됩니다.
- @AfterThrowing: 감시하는 Method 실행 중 예외(장애)가 발생했을 때만 실행됩니다.
- @After: 정상 반환 또는 예외 발생 여부와 관계없이 Method가 끝나면 무조건 실행됩니다.
구현 코드
@Aspect
@Component
@Slf4j
public class TimeCheckAop {
@Around("execution(* org.example.nbcam_addvanced_1.user.service..*(..))")
public Object executionTime(ProceedingJoinPoint joinPoint) throws Throwable {
long start = System.currentTimeMillis();
Object result = joinPoint.proceed(); // 실제 메서드 실행 -> Filter에서 doFilter 와 비슷함.
long end = System.currentTimeMillis();
log.info("[AOP] {} 실행됨 in {}ms" , joinPoint.getSignature() , end - start);
return result;
}
}