SpringBoot AOP演示项目-日志篇

源码地址 springboot-aop

一句话简介知识点 Spring AOP面向切面编程,可以用来配置 事务做日志权限验证在用户请求时做一些处理等等
CommandLineRunner,实现在项目启动后执行的功能可以用来做 预先数据的加载

面向切面编程主要知识点

  • 执行点(Executepoint) - 类初始化,方法调用。
  • 连接点(Joinpoint) - 执行点+方位的组合,可确定Joinpoint,比如类开始初始化前,类初始化后,方法调用前,方法调用后。
  • 切点(Pointcut) - 在众多执行点中,定位感兴趣的执行点。Executepoint相当于数据库表中的记录,而Pointcut相当于查询条件。
  • 增强(Advice) - 织入到目标类连接点上的一段程序代码。除了一段程序代码外,还拥有执行点的方位信息。
  • 目标对象(Target) - 增强逻辑的织入目标类
  • 引介(Introduction) - 一种特殊的增强(advice),它为类添加一些额外的属性和方法,动态为业务类添加其他接口的实现逻辑,让业务类成为这个接口的实现类。
  • 代理(Proxy) - 一个类被AOP织入后,产生一个结果类,它便是融合了原类和增强逻辑的代理类。
  • 切面(Aspect) - 切面由切点(Pointcut)和增强(Advice/Introduction)组成,既包括横切逻辑定义,也包括连接点定义。

AOP工作重点:

  1. 如何通过切点(Pointcut)和增强(Advice)定位到连接点(Jointpoint)上;
  2. 如何在增强(Advice)中编写切面的代码。

主要注解

  • @Pointcut切点注解
  • @Before 在切点方法之前执行
  • @After 在切点方法之后执行
  • @AfterReturning 切点方法返回后执行
  • @AfterThrowing 切点方法抛异常执行
  • @Around 属于环绕增强,能控制切点执行前,执行后,,用这个注解后,程序抛异常,会影响@AfterThrowing这个注解

执行前后顺序是这样

  • @Around环绕通知
  • @Before通知执行
  • @Before通知执行结束
  • @Around环绕通知执行结束
  • @After后置通知执行了!
  • @AfterReturning第一个后置返回通知的返回值:18

参考文档: