1.Before
조인 포인트 전에 실행된다.
예외가 발생하는 경우만 제외하고 항상 실행된다.
어드바이스 정의
@Before("execution(* com.spring.aop.service.BoardService*.*(..))")
public void startLog(JoinPoint jp) {
log.info("startLog");
log.info("startLog : " + jp.getSignature());
log.info("startLog : " + Arrays.toString(jp.getArgs()));
}
2**.After Returning**
@AfterReturning("execution(* com.spring.aop.service.BoardService*.*(..))")
public void logReturning(JoinPoint jp) {
log.info("logReturning");
log.info("logReturning : " + jp.getSignature());
}
3.After Throwing
어드바이스 정의
@AfterThrowing(pointcut = "execution(* com.spring.aop.service.BoardService*.*(..))", throwing = "e")
public void logException(JoinPoint jp, Exception e) {
log.info("logException");
log.info("logException : " + jp.getSignature());
log.info("logException : " + e);
}
4.After
조인 포인트에서 처리가 완료된 후 실행된다.
예외 발생이나 정상 종료 여부와 상관없이 항상 실행된다.
어드바이스 정의
@After("execution(* com.spring.aop.service.BoardService*.*(..))")
public void endLog(JoinPoint jp) {
log.info("endLog");
log.info("endLog : " + jp.getSignature());
log.info("endLog : " + Arrays.toString(jp.getArgs()));
}
5**.Around**
조인 포인트 전후에 실행된다.
어드바이스 정의
@Around("execution(* com.spring.aop.service.BoardService*.*(..))")
public Object timeLog(ProceedingJoinPoint pjp) throws Throwable {
long startTime = System.currentTimeMillis();
log.info(Arrays.toString(pjp.getArgs()));
Object result = pjp.proceed();
long endTime = System.currentTimeMillis();
log.info(pjp.getSignature().getName() + " : " + (endTime - startTime));
return result;
}
6.메서드 정보 획득
@Before 애너테이션이 붙은 메서드는 JoinPoint라는 매개변수를 통해 실행 중인 메서드의 정보를 구할 수 있다.
어드바이스 정의
@Before("execution(* com.spring.aop.service.BoardService*.*(..))")
public void log(JoinPoint jp) {
Object targetObject = jp.getTarget();
log.info("targetObject = " + targetObject);
Object thisObject = jp.getThis();
log.info("thisObject = " + thisObject);
Object[] args = jp.getArgs();
log.info("args.length = " + args.length);
}