1 什么是AOP?
1.1 概念介绍
Spring的使命是简化Java代码开发,aop作为Spring的一个子模块,也不例外。
AOP 是 Aspect Oriented Programming(面向切面编程) 的简称,和OOP(面向对象编程)一样是一种编程思想,是对OOP的一种补充。
如何理解什么是AOP呢?以日志为例,在很多管理系统,比如订单系统、推送系统等等都需要把日志记录下来。如果每个业务逻辑里面都写日志的相关代码,那就重复太多了。
干脆把日志的相关逻辑代码,统一封装起来。然后在需要的地方嵌入即可。AOP也主要就是做嵌入这件事的。看下面这张图。
新增订单编辑订单取消订单推送订单日志事务
AOP旨在将横切关注点(crosscutting concern)从业务主体逻辑中进行剥离,实现关注点分离,以提高程序的模块化程度(及业务模块只需关注业务逻辑,无需关注日志、安全、事务等通用逻辑)
上面提到了一些名词,比如说,切面、关注点、横切等,下面对这些名词进行解释。
1.2 名词解释
AOP有自己的一套术语,我们必须了解一下这些行话,才能更好地理解AOP。为了方便大家理解,下面将用课代表收作业作为例子。
通知 (Advice)
定义了在收作业前后需要做的事。常见的通知类型有:before、after、after-returning、around等。
连接点 (JoinPoint)
连接点指程序运行时允许插入切面的一个点,可以是一个函数、一个包路径、一个类、或者抛出的异常。有点类似于可以收作业的时间点。
切点(PointCut)
切点用于定义切面的位置,也就是捕获哪些连接点的调用然后执行"通知"的操作(什么地点)。
切面(Aspect)
切面是切点和通知的聚合,定义了在哪一个切点做什么通知。
目标对象( Target )
指被切面织入的对象。
引入(Introduction)
引入允许我们向现有的类添加新方法或属性。
织入(Weaving)
织入是把切面应用到切点对应的连接点的过程。切面在指定连接点被织入到目标对象中。
具体关系使用图形化表示是: