美文网首页Java
Spring Boot 2.x(十一):AOP打印接口信息

Spring Boot 2.x(十一):AOP打印接口信息

作者: b121bd095a24 | 来源:发表于2019-08-09 15:57 被阅读1次


接口日志有啥用

在我们日常的开发过程中,我们可以通过接口日志去查看这个接口的一些详细信息。比如客户端的IP,客户端的类型,响应的时间,请求的类型,请求的接口方法等等,我们可以对这些数据进行统计分析,提取出我们想要的信息。

怎么拿到接口日志

这里,我们使用的是Spring的两大杀器之AOP,通过在Controller层定义切点,然后对请求对象进行分析获取接口信息,同时开启一个ThreadLocal来记录响应时间。

关于AOP的注解

@Aspect:将一个类定义为切面类。

@Pointcut:定义一个切入点。

@Before:在切入点开始处切入内容。

@After:在切入点结尾处切入内容。

@AfterReturning:在切入点返回内容之后切入内容(可以用来对处理返回值做一些加工处理。

@Around:在切入点前后切入内容,并自己控制何时执行切入点自身的内容@AfterThrowing:用来处理当切入内容部分抛出异常之后的处理逻辑。

@Order:在切入点前的操作,按order的值由小到大执行;在切入点后的操作,按order的值由大到小执行。

实战应用

一:引入依赖

首先,我们需要新增引入aop的依赖,以及用于分析客户端信息的UserAgentUtils包,还有用于@Slf4j打印日志的Lombok的包:

二:定义一个ResponseAop切面类

在之前的统一返回值和异常处理中我们已经定义过这个类,这里是对其进行完善。这里我再把代码再写一下:

三:定义一个ThreadLocal变量

直接在这里定义基本类型会有同步问题,所以我们定义一个ThreadLocal对象来记录消耗的时间。

四:定义切点

这里需要注意的是切点的写法,一定要正确才能保证AOP生效!这里附上一些简单的写法,后续会单独开一章讲解execution表达式的书写。

任意公共方法:execution(public * *(..))

任何一个以“set”开始的方法的执行:execution(* set*(..))

Service接口的任意方法的执行:execution(* com.xyz.service.Service.*(..))

定义在service包里的任意方法的执行:execution(* com.xyz.service.*.*(..))

定义在service包和所有子包里的任意类的任意方法的执行:execution(* com.xyz.service..*.*(..))

五:在@Before中获取请求信息

六:在@AfterReturning中获取方法的返回值和执行时间


七:测试结果

下面,我们对一个接口进行访问:

可以看出,我们已经获取到我们想要的信息~

在后面的应用实战中,我们会将这些信息保存到数据库中,并且使用一些数据分析工具进行分析。

相关文章

网友评论

    本文标题:Spring Boot 2.x(十一):AOP打印接口信息

    本文链接:https://www.haomeiwen.com/subject/djrhjctx.html