AOP之异常通知与环绕通知

异常通知

异常通知:只有当切点报异常才能触发异常通知

AspectJ方式实现

  1. 新建类,在类写任意名称的方法
    public class MyThrowAdvice{    public void myexception(Exception e1){        System.out.println("执行异常通知"+e1.getMessage());    }}
  2. 在 spring 配置文件中配置
  3. 1 <aop:aspect>的 ref 属性表示:方法在哪个类中
  4. 2 <aop: xxxx/>表示什么通知
  5. 3 method: 当触发这个通知时,调用哪个方法
  6. 4 throwing: 异常对象名,必须和通知中方法参数名相同(可以不在通知中声明异常对象)
    <bean id="mythrow" class="top.ljc.advice.MyThrowAdvice"></bean><aop:config>    <aop:aspect ref="mythrow">    <aop:pointcut expression="execution(*top.ljc.test.Demo.demo1())" id="mypoint"/>    <aop:after-throwing method="myexception" pointcut-ref="mypoint" throwing="e1"/>    </aop:aspect></aop:config><bean id="demo" class="top.ljc.test.Demo"></bean>

    Schema-based方式实现

  7. 新建一个类实现 throwsAdvice 接口
  8. 1 必须自己写方法,且必须叫afterThrowing
  9. 2 有两种参数方式,必须是1个或4个
  10. 3 异常类型要与切点报的异常类型一致
    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 方式");    }}
  11. 在 ApplicationContext.xml 配置
    <bean id="mythrow" class="top.ljc.advice.MyThrow"></bean><aop:config>    <aop:pointcut expression="execution(*top.ljc.test.Demo.demo1())" id="mypoint"/>    <aop:advisor advice-ref="mythrow" pointcut-ref="mypoint" /></aop:config><bean id="demo" class="top.ljc.test.Demo"></bean>

环绕通知(Schema-based方式)

把前置通知和后置通知都写到一个通知中,组成了环绕通知

  1. 新建一个类实现 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;    }}
  2. 配置 applicationContext.xml
    <bean id="myarround" class="top.ljc.advice.MyArround"></bean><aop:config>    <aop:pointcut expression="execution(*top.ljc.test.Demo.demo1())" id="mypoint"/>    <aop:advisor advice-ref="myarround" pointcut-ref="mypoint" /></aop:config><bean id="demo" class="top.ljc.test.Demo"></bean>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值