본문 바로가기

Spring

2-3. 어드바이스 동작 시점

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;
	}
}