Around 어노테이션을 검색해봤을 때, 단순히 개념적인 설명만 있고
어떤 케이스에 사용하는지 예시가 다양하지 않아 직접 정리해 보았다.
@Around 는 ‘핵심관심사’의 실패여부와 상관없이 전 후로 실행되록 하는 Advice로,
아래와 같이 메서드를 생성할 때,
return 값은 Object 이고, 인자는 ProceedingJoinPoint 이다.
@Around("포인트컷")
public Object before(ProceedingJoinPoint proceedingJoinPoint) {
// 핵심관심사 실행 전 로직
Object obj = proceedingJoinPoint.proceed();
// 핵심관심사 실행 후 로직
}
그래서 @Around 어노테이션을 이점을 살려서 사용하는 경우, 크게 두가지가 존재한다.
1. request와 response를 로깅할 수 있다.
@Around("포인트컷")
public Object before(ProceedingJoinPoint proceedingJoinPoint) {
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
// request에서 필요한 데이터 가공해서 로그 남기는 로직
Object obj = proceedingJoinPoint.proceed();
// 핵심관심사의 결과값인 obj를 로그로 남기기
}
@Around("포인트컷")
public Object before(ProceedingJoinPoint proceedingJoinPoint) {
Object[] args = proceedindJoinPoint.getArgs();
// args 가공 로직
Object obj = proceedingJoinPoint.proceed(args);
}