AOP 介绍

AOP 简介

  • AOP( Aspect Oriented Programming )面向切面编程,一种编程范型,指导开发者如何组织程序结构
  • 00P( Object Oriented Programming ) 面向对象编程
  • AOP 的作用: 在不惊动原始设计的基础上为其进行功能增强

AOP 术语

  • 切面(Aspect): 一个跨越多个类的关注点的模块化。事务管理是企业级Java应用中横切问题的一个很好的例子。在Spring AOP中,方面是通过使用普通类(基于模式的方法)或使用@Aspect注解的普通类(@AspectJ风格)来实现的。

    • 描述通知与切入点的对应关系
  • 连接点(Join point): 程序执行过程中的一个点,。在Spring AOP中 一个连接点总是代表一个方法的执行,粒度为 【方法的执行】、【异常的处理】、【设置变量】。

    • 在 Spring AOP 中,理解为方法的执行
  • 通知(Advice): 一个切面在一个特定的连接点上采取的操作,也就是共性功能。不同类型的通知包括 “周围”、”之前 “和 “之后 “的通知。许多AOP框架,包括Spring,都将建议建模为一个拦截器,并在连接点周围维护一个拦截器链。

    • 在 Spring AOP 中,功能最终以方法的形式呈现
  • 切入点(Pointcut): 匹配连接点的切入点表达式。与一个切入点表达式相关联,并在切点匹配的任何连接点上运行(例如,执行具有某个名称的方法)。由切点表达式匹配的连接点概念是AOP的核心,Spring默认使用AspectJ的切点表达式语言。

    • 在 Spring AOP 中,一个切入点可以只描述一个具体的方法,也可以匹配多个方法
      • 一个具体的方法: cn.pangcy.dao 包下的 BookDao 接口中的无形参无返回值的 save 方法
      • 匹配多个方法:所有的 save 方法,所有的 get 开头的方法,所有以 Dao 结尾的接口中的任意方法,所有带有一个参数的方法
  • 介绍(Introduction): 代表一个类型声明额外的方法或字段。Spring AOP允许你为任何建议的对象引入新的接口(以及相应的实现)。例如,你可以使用引入来使一个bean实现IsModified接口,以简化缓存。(介绍在AspectJ社区中被称为类型间声明)。

  • 目标对象(Target object:): 被一个或多个方面通知的对象。也被称为 “通知对象”。由于Spring AOP是通过使用运行时代理来实现的,所以这个对象总是一个被代理的对象。

    • 原始功能去掉共性功能对应的类产生的对象,这种对象无法直接完成最终工作。
  • AOP代理(AOP proxy): 由AOP框架创建的一个对象,以实现切面能力(通知方法执行等)。在Spring框架中,AOP代理是一个JDK动态代理或CGLIB代理。

    • 目标对象无法直接完成工作,需要对齐进行功能功能回填,通过原始对象的代理对象实现。
  • 编织(Weaving):将方面与其他应用类型或对象联系起来,以创建一个建议对象。这可以在编译时(例如,使用AspectJ编译器)、加载时或运行时完成。Spring AOP和其他纯Java AOP框架一样,在运行时进行编织。

关系图


AOP 介绍
https://blog.pangcy.cn/2023/04/09/后端编程相关/java/spring/AOP 介绍/
作者
子洋
发布于
2023年4月9日
许可协议