1 분 소요

After Returning 와 Throwing 어드바이스

  • After Returning
<bean id ="logAfterAdvice" class="spring.aop.advice.LogAfterAdvice"/>
	<bean id ="exam" class="org.springframework.aop.framework.ProxyFactoryBean">
	<property name="target" ref="target" />
	<!-- 핸들러 넣어준다  -->
	<property name="interceptorNames">
		<list>
			<value>logAfterAdvice</value>
		</list>
	</property>
	</bean>

public class LogAfterAdvice implements AfterReturningAdvice {

	@Override
	public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
		// TODO Auto-generated method stub

		System.out.println("return:" + returnValue + ", method:" + method.getName());
	}

}


앞에 실행될 로직 //Before
return:4, method:total //After Returning
203ms 시간 걸렸습니다 //Around
total is 4
앞에 실행될 로직
return:1.0, method:avg
204ms 시간 걸렸습니다
avg is 1.000000

Before가 호출 되고 tagar의 메소드가 호출된다 실행된다

 

  • Throwing
public class LogAfterTrowingAdvice implements ThrowsAdvice {

	

	 public void afterThrowing(어떤 오류가 발생하는냐에따라서 여기에 사용한다 ) throws Throwable {
	}
	
}


여러 Advice가 실행될 때 예외가 발생하면 Throwing Advice가 실행된다

기존의 다른것인자가 고정되었으나 함수인자가 달라진다

어떤것으로 구현할지 정하기가 어렵다

 

  • IllegalArgumentException로 사용해보기
	<bean id ="logAfterTrowingAdvice" class="spring.aop.advice.LogAfterTrowingAdvice"/>

	<bean id ="exam" class="org.springframework.aop.framework.ProxyFactoryBean">
	<property name="target" ref="target" />
	<!-- 핸들러 넣어준다  -->
	<property name="interceptorNames">
		<list>
			<value>logAfterTrowingAdvice</value>
		</list>
	</property>
	</bean>
public class LogAfterTrowingAdvice implements ThrowsAdvice {


	public void afterThrowing(IllegalArgumentException e) throws Throwable {
		System.out.println("예외가 발생하였습니다: " + e.getMessage());
	}

}

 

일부러 예외 발생 시켜보자

public int total() {

//		long start = System.currentTimeMillis();
		int result = kor + eng + math + com;

		if (kor > 100)
			throw new IllegalArgumentException("유효하지않은국어점수");

		try {
			Thread.sleep(200);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}


		return result;
	<property name="interceptorNames">
앞에 실행될 로직
Exception in thread "main" 예외가 발생하였습니다: 유효하지않은국어점수
java.lang.IllegalArgumentException: 유효하지않은국어점수

카테고리:

업데이트:

댓글남기기