配置异常通知的步骤(AspectJ 方式)
只有当切点报异常才能触发异常通知 在 spring 中有 AspectJ 方式提供了异常通知的办法 如果希望通过 schema-base 实现需要按照特定的要求自己编写方法
3. 实现步骤
新建类,在类写任意名称的方法
public class MyThrowAdvice {
public void myexception ( Exception e1) {
System. out. println ( "执行异常通知 " + e1. getMessage ( ) ) ;
}
}
在 spring 配置文件中配置 aop:aspect标签的 ref 属性——表示方法在哪个类中 举例:ref=“mythrow” aop:xxxx/标签——表示什么通知 举例:aop:after-throwing ,aop:pointcut ,aop:aspect method参数: 当触发这个通知时,调用哪个方法 举例:method=“方法名” throwing参数: 异常对象名,必须和通知中方法参数名相同(可以不在通知中声明异常对象) 举例:
< bean id = " mythrow" class = " com.youdian.advice.MyThrowAdvice" > </ bean>
< aop: config>
< aop: aspect ref = " mythrow" >
< aop: pointcut expression = " execution(* com.youdian.test.Demo.demo1())"
id = " mypoint" />
< aop: after-throwing method = " myexception" pointcut-ref = " mypoint"
throwing = " e1" />
</ aop: aspect>
</ aop: config>
< bean id = " demo" class = " com.youdian.test.Demo" > </ bean>
异常通知(Schema-based 方式)
新建一个类实现 throwsAdvice 接口 必须自己写方法,且必须叫 afterThrowing 有两种参数方式(必须是 1 个或 4 个) 异常类型要与切点报的异常类型一致
public class MyThrow implements ThrowsAdvice {
public void afterThrowing ( Method m, Object[ ] args, Object target,
Exception ex) {
System. out. println ( "执行异常通知" ) ;
}
public void afterThrowing ( Exception ex) throws Throwable {
System. out. println ( "执行异常通过-schema-base 方式 " ) ;
}
}
在 ApplicationContext.xml 配置
< bean id = " mythrow" class = " com.youdian.advice.MyThrow" > </ bean>
< aop: config>
< aop: pointcut
expression = " execution(*com.youdian.test.Demo.demo1())" id = " mypoint" />
< aop: advisor advice-ref = " mythrow" pointcut-ref = " mypoint" />
</ aop: config>
< bean id = " demo" class = " com.youdian.test.Demo" > </ bean>
环绕通知(Schema-based 方式)
把前置通知和后置通知都写到一个通知中,组成了环绕通知
2. 实现步骤
新建一个类实现 MethodInterceptor
public class MyArround implements MethodInterceptor {
@Override
public Object invoke ( MethodInvocation arg0) throws Throwable {
System. out. println ( "环绕-前置" ) ;
Object result = arg0. proceed ( ) ;
System. out. println ( "环绕-后置" ) ;
return result;
}
}
配置 applicationContext.xml
< bean id = " myarround" class = " com.youdian.advice.MyArround" > </ bean>
< aop: config>
< aop: pointcut expression = " execution(* com.youdian.test.Demo.demo1())"
id = " mypoint" />
< aop: advisor advice-ref = " myarround" pointcut-ref = " mypoint" /> </ aop: config>
< bean id = " demo" class = " com.youdian.test.Demo" > </ bean>