Advice
Advice 순서
Before
AfterRunning
@AfterReturning(value = "execution(* com.test.controller.TestController.*(..))", returning = "returnValue")
public void writeSuccessLog(JoinPoint joinPoint, ResponseObject returnValue) throws RuntimeException {
//logging
//returnValue 는 해당 메서드의 리턴객체를 그대로 가져올 수 있다.
}
AfterThrowing
@AfterThrowing(value = "execution(* com.test.controller.TestController.*(..))", throwing = "exception")
public void writeFailLog(JoinPoint joinPoint, Exception exception) throws RuntimeException {
//logging
//exception 으로 해당 메서드에서 발생한 예외를 가져올 수 있다.
}
After (finally)
Around
@Around("execution(public * com.sparta.springcore.controller..*(..))")
public Object execute(ProceedingJoinPoint joinPoint) throws Throwable {
// 앞에서 부가 기능 수행
// 핵심기능 수행
Object output = joinPoint.proceed(); // 들어온 요청을 controller 로 보냄
// 뒤에서 부가 기능 수행 가능
return output; // controller 에서 처리된 요청을 반환
}
모든 Advice는 Around 만으로도 전부 처리 가능