# AOP 核心概念

  • 连接点(JoinPoint):程序执行过程中的任意位置,粒度为执行方法、抛出异常、设置变量等

    • 在 SpringAOP 中,理解为方法的执行
  • 切入点(Pointcut):匹配连接点的式子

    • 在 SpringAOP 中,一个切入点可以描述一个具体方法,也可也匹配多个方法
      • 一个具体的方法:如 com.itheima.dao 包下的 BookDao 接口中的无形参无返回值的 save 方法
      • 匹配多个方法:所有的 save 方法,所有的 get 开头的方法,所有以 Dao 结尾的接口中的任意方法,所有带有一个参数的方法

    连接点范围要比切入点范围大,是切入点的方法也一定是连接点,但是是连接点的方法就不一定要被增强,所以可能不是切入点。

  • 通知(Advice):在切入点处执行的操作,也就是共性功能

    • 在 SpringAOP 中,功能最终以方法的形式呈现
  • 通知类:定义通知的类

  • 切面(Aspect):描述通知与切入点的对应关系

# 知识点 1:@EnableAspectJAutoProxy

名称@EnableAspectJAutoProxy
类型配置类注解
位置配置类定义上方
作用开启注解格式 AOP 功能

# 知识点 2:@Aspect

名称@Aspect
类型类注解
位置切面类定义上方
作用设置当前类为 AOP 切面类

# 知识点 3:@Pointcut

名称@Pointcut
类型方法注解
位置切入点方法定义上方
作用设置切入点方法
属性value(默认):切入点表达式

# 知识点 4:@Before

名称@Before
类型方法注解
位置通知方法定义上方
作用设置当前通知方法与切入点之间的绑定关系,当前通知方法在原始切入点方法前运行

# AOP 工作流程

  1. Spring 容器启动
  2. 读取所有切面配置中的切入点
  3. 初始化 bean
  4. 获取 bean,执行方法

  • 目标对象 (Target):原始功能去掉共性功能对应的类产生的对象,这种对象是无法直接完成最终工作的
  • 代理 (Proxy):目标对象无法直接完成工作,需要对其进行功能回填,通过原始对象的代理对象实现

目标对象就是要增强的类对应的对象,也叫原始对象,不能说它不能运行,只能说它在运行的过程中对于要增强的内容是缺失的。

SpringAOP 是在不改变原有设计(代码)的前提下对其进行增强的,它的底层采用的是代理模式实现的,所以要对原始对象进行增强,就需要对原始对象创建代理对象,在代理对象中的方法把通知内容加进去,就实现了增强,这就是我们所说的代理(Proxy)。

# AOP 切入点表达式

# 语法格式

  • 切入点:要进行增强的方法
  • 切入点表达式:要进行增强的方法的描述方式

切入点表达式标准格式

  • 动作关键字 (访问修饰符 返回值 包名。类 / 接口名。方法名 (参数) 异常名)
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

Mr.Song 微信支付

微信支付

Mr.Song 支付宝

支付宝