前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >spring的切面,AOP的afterThrowing参数处理解释说明

spring的切面,AOP的afterThrowing参数处理解释说明

作者头像
一写代码就开心
发布2020-11-20 15:07:02
3.1K0
发布2020-11-20 15:07:02
举报
文章被收录于专栏:java和python
代码语言:javascript
复制
package com.sam.annotation;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;


@Aspect //AOP 切面     定义了这个类就是一个扩展类
@Component
public class MyLogAspect {


    //切入点
    # @Pointcut(" (execution(* com.jing.text.xs.controller.*.*(..)))")  对已有的方法进行扩展
    @Pointcut(value = "@annotation(com.sam.annotation.MyLog)")  对注解进行扩展
    private void pointcut() {
    }


    /**
     * 方法执行后
     *   // 声明result时指定的类型会限制目标方法必须返回指定类型的值或没有返回值
    // 此处将result的类型声明为Object,意味着对目标方法的返回值不加限制
     * @param joinPoint
     * @param myLog
     * @param result
     * @return
     */
    @AfterReturning(value = "pointcut()", returning = "result")
    public Object afterReturning(JoinPoint joinPoint, MyLog myLog, Object result) {

//        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
//        HttpSession session = request.getSession();

        System.out.println("++++执行了afterReturning方法++++");

        System.out.println("执行结果:" + result);

        return result;
    }

使用@AfterReturning注解可指定如下两个常用属性。

throwing:该属性指定一个形参名,用于表示afterReturning方法中可定义与此同名的形参,该形参可用于访问目标方法抛出的异常。除此之外,在Advice方法中定义该参数时,指定的类型,会限制方法必须抛出指定类型的异常。

代码语言:javascript
复制
@Aspect  
public class RepairAspect  
{  
    // 匹配com.owenapp.service.impl包下所有类的、  
    // 所有方法的执行作为切入点  
    @AfterThrowing(throwing="ex"  
        , pointcut="execution(* com.owen.app.service.impl.*.*(..))")  
    // 声明ex时指定的类型会限制目标方法必须抛出指定类型的异常  
    // 此处将ex的类型声明为Throwable,意味着对目标方法抛出的异常不加限制  
    public void doRecoveryActions(Throwable ex)  
    {  
        System.out.println("目标方法中抛出的异常:" + ex);  
        System.out.println("模拟Advice对异常的修复...");  
    }  
}  

AfterThrowing里面的 参数throwing,returning是接收的原来方法的抛出的异常 和 原来方法的返回值

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/11/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档