Spring AOP
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 먼저 실행됨
진행되는 순서
- @Around의 try구문 전까지
- @Before구문 위부터 순서대로
- target 메서드 실행
- @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;
}
댓글남기기