Before 어드바이스는 포인트컷으로 지정된 메소드 호출 시
메소드가 실행되기 전에 처리될 내용들을 기술하기 위해 사용됩니다.
package com.springtest.biz.common;
public class BeforeAdvice {
public void beforeLog() {
System.out.println("[사전 처리] 비즈니스 로직 수행 전 동작");
}
}
어드바이스 메소드를 before로 수행하려면 <aop:before> 엘리먼트를 사용합니다.
위 설정은 allPointcut으로 지정한 모든 Impl 클래스의 메소드가 실행되기 직전에
before로 지정한 어드바이스의 beforeLog() 메소드가 실행 되도록 설정한 것 입니다.
After Returning 어드바이스는 포인트컷으로 지정된 메소드가 정상적으로 실행되고 나서
메소드 수행 결과로 생성된 데이터를 리턴하는 시점에 동작합니다.
package com.springtest.biz.common;
public class AfterReturningAdvice {
public void afterLog() {
System.out.println("[사후 처리] 비즈니스 로직 수행 후 동작");
}
}
위 설정은 BoardServiceImpl 이나 UserServiceImpl 같이 클래스 이름이 Impl 로 끝나는 모든 클래스의 메소드가 실행되고
무언가를 리턴한 다음, afterReturningAdvice로 지정한 어드바이스의 afterLog() 메소드가 실행되도록 합니다.
After Throwing 어드바이스는 포인트컷으로 지정된 메소드가 실행 중에
예외가 발생하는 시점에 동작합니다.
package com.springtest.biz.common;
public class AfterThrowingAdvice {
public void exceptionLog() {
System.out.println("[예외 처리] 비즈니스 로직 수행 중 예외 발생");
}
}
위 설정은 allPointcut이라는 포인트컷으로 지정한 메소드에서 예외가 발생할 경우,
afterThrowing 어드바이스의 exceptionLog() 메소드를 실행하기 위한 설정입니다.
After Throwing 어드바이스가 동작하게 만들기 위해 예외를 발생시키는 코드를 추가합니다.
After 어드바이스는 try-catch-finally 구문에서 finally 처럼 예외 발생 여부에 상관없이
무조건 수행되는 어드바이스를 등록할 때 After 어드바이스를 사용합니다.
package com.springtest.biz.common;
public class AfterAdvice {
public void finallyLog() {
System.out.println("[사후 처리] 비즈니스 로직 수행 후 무조건 동작");
}
}
finallyLog()가 먼저 호출되고 exceptionLog() 메소드가 실행되는 것을 확인할 수 있습니다.
Around 어드바이스는 메소드 실행 전과 후에 모두 동작하여 로직을 처리합니다.
package com.springtest.biz.common;
import org.aspectj.lang.ProceedingJoinPoint;
public class AroundAdvice {
public Object aroundLog(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("[BEFORE] : 비즈니스 메소드 수행 전에 처리할 내용...");
Object returnObj = pjp.proceed();
System.out.println("[AFTER] : 비즈니스 메소드 수행 후에 처리할 내용...");
return returnObj;
}
}
'Spring' 카테고리의 다른 글
2-5. 어노테이션 기반 AOP (0) | 2025.02.01 |
---|---|
2-4. 스프링 JoinPoint와 바인드 변수 (0) | 2025.01.31 |
2-2. AOP 용어 및 기본 설정 (0) | 2025.01.29 |
2-1. 스프링 AOP (0) | 2025.01.29 |
1-7. 스프링 setter 주입 활용 회원 정보 관리 컴포넌트 작성 (0) | 2025.01.28 |