AOP2

@AfterThrowing
// target 메서드가 실행될 때 예외발생이 되면 호출이 됨
// target 메서드란 -> execution안에 가리키는 클래스
@AfterThrowing(pointcut = "execution(* com.demo.service.SampleService*.*(..))", throwing = "exception")
public void logException(Exception exception) {
    log.info("Exception...");
    log.info("exception : " + exception);
}

@Around

@Before 전에 @Around 먼저 실행됨

진행되는 순서

  1. @Around의 try구문 전까지
  2. @Before구문 위부터 순서대로
  3. target 메서드 실행
  4. @Around의 try구문 이후
@Around("execution(* com.demo.service.SampleService*.*(..))")
public Object logTime(ProceedingJoinPoint pjp) {

    long start = System.currentTimeMillis();

    // Target메서드의 객체
    log.info("Target : " + pjp.getTarget());

    // target메서드의 파라미터 정보
    log.info("Param : " + Arrays.toString(pjp.getArgs()));

    Object result = null;

    // pjp.proceed();에서 target메서드로 제어가 넘어간다
    try {
        result = pjp.proceed();
    } catch (Throwable e) {
        e.printStackTrace();
    }

    long end = System.currentTimeMillis();

    log.info("Time : " + (end - start));

    return result;
}

태그:

카테고리:

업데이트:

댓글남기기