springboot整合aop的demo(1)

  一. 项目里在调用别人接口时,需要把调用接口的情况入参和出参都进行一下记录,碰到这种情况,我不想在每个调用接口的方法里都写一遍同样的代码,所以就想到用aop来解决这个需求,这篇文章就是讲解下aop的简单使用。

这里先讲下对aop的理解,我们传统的编程方式是垂直化的编程,即A→B→C→D这么下去,一个逻辑完毕之后执行另外一段逻辑。但AOP提供了另外一种思路,它的作用是在业务逻辑不知情(即业务逻辑不需要做任何的改动)的情况下对业务代码的功能进行增强,这种编程思想的使用场景有很多,例如事务提交、方法执行之前的权限检测、日志打印、方法调用事件等等。

1.建好项目后,把pom.xml依赖加进去

2.创建一个controll类和user类

3.创建一个切面类

//申明是个切面
@Aspect//这个注解的作用是:将一个类定义为一个切面类
//申明是个spring管理的bean
@Component//这个注解的作用:把切面类加入到IOC容器中
@Order(1)
//这个注解的作用是:标记切面类的处理优先级,i值越小,优先级别越高.PS:可以注解类,也能注解到方法上//这个注解的作用是:标记切面类的处理优先级,i值越小,优先级别越高.PS:可以注解类,也能注解到方法上
@Slf4j
public class AspectDemo {
    private Gson gson = new Gson ();
    //申明一个切点 里面是 execution表达式
    @Pointcut("execution(* com.dataw.springboot_aop2..*.*(..))")
    private void webLog() {
    }
//请求method前打印内容
    @Before (value = "webLog()")//这个注解的作用是:在切点前执行方法,内容为指定的切点
    public  void  methodBefore(JoinPoint joinPoint){
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = requestAttributes.getRequest();
        //打印请求内容
        log.info("========================请求内容======================");
        log.info("请求地址:" + request.getRequestURI().toString());
        log.info("请求方式" + request.getMethod());
        log.info("请求类方法" + joinPoint.getSignature());
        log.info("请求类方法参数" + Arrays.toString(joinPoint.getArgs()));
        log.info("========================请求内容======================");

    }
    //在方法执行完结后打印返回内容
    @AfterReturning(returning = "o", pointcut = "webLog()" )
    //这个注解的作用是:在切入点,return后执行,如果想对某些方法的返回参数进行处理,可以在这操作
    public void methodAfterReturing(Object o) {
        log.info("--------------返回内容----------------");
        log.info("Response内容:" + gson.toJson(o));
        log.info("--------------返回内容----------------");

    }

}

使用@AfterReturning注解可指定如下两个常用属性。
1)  pointcut/value:这两个属性的作用是一样的,它们都属于指定切入点对应的切入表达式。一样既可以是已有的切入点,也可直接定义切入点表达式。当指定了pointcut属性值后,value属性值将会被覆盖。
2)  returning:该属性指定一个形参名,用于表示Advice方法中可定义与此同名的形参,该形参可用于访问目标方法的返回值。除此之外,在Advice方法中定义该形参(代表目标方法的返回值)时指定的类型,会限制目标方法必须返回指定类型的值或没有返回值

4.通过启动类启动项目访问即可http://localhost:8083/test/testAspect?name=www

猜你喜欢

转载自blog.csdn.net/qq_34709784/article/details/106736399
今日推荐