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 结尾的接口中的任意方法,所有带有一个参数的方法
- 一个具体的方法:
- 在 Spring AOP 中,一个切入点可以只描述一个具体的方法,也可以匹配多个方法
介绍(Introduction): 代表一个类型声明额外的方法或字段。Spring AOP允许你为任何建议的对象引入新的接口(以及相应的实现)。例如,你可以使用引入来使一个bean实现IsModified接口,以简化缓存。(介绍在AspectJ社区中被称为类型间声明)。
目标对象(Target object:): 被一个或多个方面通知的对象。也被称为 “通知对象”。由于Spring AOP是通过使用运行时代理来实现的,所以这个对象总是一个被代理的对象。
- 原始功能去掉共性功能对应的类产生的对象,这种对象无法直接完成最终工作。
AOP代理(AOP proxy): 由AOP框架创建的一个对象,以实现切面能力(通知方法执行等)。在Spring框架中,AOP代理是一个JDK动态代理或CGLIB代理。
- 目标对象无法直接完成工作,需要对齐进行功能功能回填,通过原始对象的代理对象实现。
编织(Weaving):将方面与其他应用类型或对象联系起来,以创建一个建议对象。这可以在编译时(例如,使用AspectJ编译器)、加载时或运行时完成。Spring AOP和其他纯Java AOP框架一样,在运行时进行编织。