这一篇文章咱们继续延续上一篇的博客《SpringBoot——问题讲解》之后的的续篇,咱们这篇文章主要的内容就是讲解AOP处理请求日志。


【AOP】

  AOP(Aspect Oriented Programming)面向切面编程,是一种编程的范式,与语言无关是一种程序设计思想,OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容。这种思想也同样的适用于:动态代理

【优点】

利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

【垂直处理和水平处理】


我们以记录每个Http请求为例:


垂直处理:

android logger 打印长日志信息_业务逻辑

AOP进行水平处理:利用AOP进行方法拦截,红色的箭

android logger 打印长日志信息_业务逻辑_02

  从图中看出,AOP对我们的业务的纵向走势不会造成阻碍作用,所以所面向切面编程是对面向对象编程的一种补充。上图是简单的一个AOP横向逻辑切入业务逻辑纵向逻辑的一个直挂展示,有些人会问?为什么要这样做?我们有那么多的横切行的必要吗?现在我们看看使用AOP可以帮助我们避免那些问题?



aop解决了大量的代码重复。


  我需要做一个日志的功能,即需要在每条线上都进行日志的处理,我们是不是要这么写?

android logger 打印长日志信息_spring_03

这样有很多条线中都包含了一段相同的代码,你怎么看?抽出来呗,作为公共的部分,被调用。

android logger 打印长日志信息_spring_04

这样每个方法都和这个公共的功能类有关联关系,这里只是我们的抽出公共代码,解决了代码重复。我们需要做的是“解耦”,将业务类和这个公共的功能类之间的耦合解开。

【实现AOP】

一、代码优化前

maven的pom中添加引用

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-aop</artifactId>  
</dependency>


android logger 打印长日志信息_AOP处理请求日志、SpringBoot_05



android logger 打印长日志信息_AOP处理请求日志、SpringBoot_06

以其中的girlList()方法为例子:

android logger 打印长日志信息_业务逻辑_07

显示结果:

android logger 打印长日志信息_AOP_08

这就是AOP面向切面编程的实现,但是我们发现一个问题,下图所示的代码出现了重复,这就是一种很不好的编程,显着特别的low,所有我们要对其进行优化

android logger 打印长日志信息_业务逻辑_09

android logger 打印长日志信息_业务逻辑_10

二、代码优化后:

注意:红色的框框是System.out.println用spring自带的SLF4J实现,蓝色的是抽出公共的部分

android logger 打印长日志信息_业务逻辑_11

显示结果:

android logger 打印长日志信息_AOP_12

【结尾】

小伙伴们是不是发现用了AOP之后程序变得简单了好多,省略很多重复的代码呢?