example code
// hello.aop.order 패키지와 하위패키지이면서 클래스 이름 패턴이 Service 인것
@Around("hello.aop.order.aop.Pointcuts.orderAndService()")
public Object doTransaction(ProceedingJoinPoint joinPoint) throws Throwable {
try {
// @Before
log.info("[Transaction Start] {}", joinPoint.getSignature());
final Object result = joinPoint.proceed();
// @AfterReturning
log.info("[Transaction End] {}", joinPoint.getSignature());
return result;
} catch (IllegalStateException e) {
// @AfterThrowing
log.info("[Transaction Rollback] {}", joinPoint.getSignature());
throw e;
} finally {
// @After
log.info("[Resource Release] {}", joinPoint.getSignature());
}
}
- @Around : 메소드 호출 전후에 수행, 가장 강력한 Advice이고 Joinpoint 실행 여부 선택, 반환 값 변환, 예외 변환등 모든 기능 사용가능합니다.
- @Before : Joinpoint 실행 이전에 실행합니다.
- @AfterReturning: Joinpoint가 정상 완료후 실행합니다.
- @AfterThrowing : 메소드가 예외를 던지는 경우 실행합니다.
- @After : Joinpoint가 정상적으로 처리되거나 예외가 발생하거나 상관없이 실행됩니다(finally)