# 概念

AOP(aspect oriented Programming)面向切面编程,一种编程范式。

# 作用

在不惊动原始设计的基础上为方法进行功能增强

# 核心概念

  1. 代理(proxy)SpringAOP 的核心本质是采用代理模式实现的
  2. 连接点(joinproint)在 SpringAOP 中,理解为任意方法的执行
  3. 切入点(pointcut)匹配连接点的式子,也是具有共性功能的方法描述
  4. 通知(advice)若干个方法的共性功能,在切入点处执行,最终体现为一个方法
  5. 切面(aspect)描述通知和切入点的对应关系
  6. 目标对象(target)被代理的原始对象成为目标对象

# 切入表达式标准格式

动作关键字(访问修饰符 返回值 包名,类 / 接口名,方法名(参数)异常名)

1
execution(* com.包名。service.*Servive.*(..))

切入点表达式描述通配符

  1. 作用:用于快速描述,范围描述
  2. *:匹任意字符串(常用)
  3. .. : 匹配多个连续的任意符号(常用)
  4. +:匹配子类类型

# 切入点表达式书写技巧

  1. 按照标准规范开发

  2. 查询操作的返回值建议使用 * 匹配

  3. 减少使用.. 的形式描述包

  4. 对接口进行描述,使用 * 表示模块名,例如 userService 的匹配描述为 * Service

  5. 方法名书写保留动词,例如 get , 使用 * 表示名词,例如 getById 匹配描述为 getBy *

  6. 参数根据实际情况灵活调整

# 通知类型

前置通知

后置通知

# 环绕通知(重点)
# 环绕通知依赖于形参 ProccedingJoinPoint 才能实现对原始方法的调用
# 环绕通知可以隔离原始方法的调用执行
# 环绕通知放回置设置为 Object 类型
# 环绕通知中可以对原始方法调用过程中出现的异常进行处理

放回后通知

抛出异常后通知

# 获取切入点方法的参数

JoinPoint 适用于前置、后置、放回后,抛出异常后通知,设置为第一个方法的形参

ProccedJoinPoint: 适用于环绕通知

# 获取切点方法返回值

返回后通知

环绕通知

# 获取切入点方法运行异常信息

抛出异常后通知

环绕通知