实现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 抛出异常运行异常