实现org.springframework.aop.ThrowsAdvice;
package com.testApi.throwsAdvice;
import org.springframework.aop.ThrowsAdvice;
import java.lang.reflect.Method;
public class TransateManage implements ThrowsAdvice {
//方法的签名必须符合规范
//1。方法名必须是afterThrowing
//2。第四个参数必须是Thowable或者其子类,前三个参数要么都提供,要么都不提供
//同一个异常增强中可以有多个afterThrowing方法,会自动按照最匹配的方法进行增强
public void afterThrowing(Method method,Object[] args,Object ob,Throwable throwable){
System.out.println("========");
System.out.println(method.getName());
System.out.println("抛出异常"+throwable);
System.out.println("做其他工作。。。");
}
public void afterThrowing(Method method,Object[] args,Object ob,RuntimeException e){
System.out.println("========");
System.out.println(method.getName());
System.out.println("抛出异常"+e.getMessage());
System.out.println("做其他工作。。。");
}
}
beans.xml
<?xml version="1.0" encoding="utf-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- 增强类-->
<bean id="throwableAdvice" class="com.testApi.throwsAdvice.TransateManage"/>
<bean id="target2" class="com.testApi.beforeAdvice.SuperWaiter"/>
<bean id="waiter" class="org.springframework.aop.framework.ProxyFactoryBean"
p:interceptorNames="throwableAdvice"
p:target-ref="target2"
p:proxyTargetClass="true"/>
</beans>
接口:
package com.testApi.beforeAdvice;
public interface Waiter {
void greetingTo(String name);
void serveTo(String name);
}
实现类:
package com.testApi.beforeAdvice;
public class SuperWaiter implements Waiter {
@Override
public void greetingTo(String name) {
System.out.println("greeting to" +name);
throw new RuntimeException("运行异常");
}
@Override
public void serveTo(String name) {
System.out.println("serve to"+name);
}
}
测试类:
@Test
public void test5(){
ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");
Waiter waiter=(Waiter) context.getBean("waiter");
waiter.greetingTo("异常测试");
}
输出:
greeting to异常测试
========
greetingTo
抛出异常运行异常