원래의 메서드가 실행되기 전에 어떤 작업을 하고, 메서드가 실행된 후 결과를 받아 후처리를 할 수 있다.
메서드를 감싸서 실행을 제어할 수 있기 때문에 가장 강력한 어드바이스(advice)라고 부른다.
@Around("포인트컷 표현식")
public Object 어드바이스메서드(ProceedingJoinPoint joinPoint) throws Throwable {
// 메서드 실행 전
System.out.println("Before");
Object result = joinPoint.proceed(); // 원래 대상 메서드 실행
// 메서드 실행 후
System.out.println("After");
return result; // 최종적으로 컨트롤러나 서비스로 응답 리턴
}
joinPoint.proceed() 호출 전: 메서드 실행 전에 할 일
joinPoint.proceed() 호출: 진짜 타겟 메서드 실행
joinPoint.proceed() 호출 후: 메서드 실행 후 할 일
공통 기능을 분리하고 싶을 때 사용함.
예) 로깅, 트랜잭션 처리, 권한 체크, 성능 측정, 예외처리 등등