21.after returning와 throwing어드바이스
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: 유효하지않은국어점수
댓글남기기