戴着假发的程序员出品 抖音ID:戴着假发的程序员 欢迎关注
[查看视频教程]
[1]Aspect(切面)
Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。
[2]Joint point(连接点)
表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。
[3]Pointcut(切点)
表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。
[4]Target(目标对象)
织入 Advice 的目标对象.。
[5]Weaving(织入)
将 Aspect 和其他对象连接起来, 并创建 Adviced object 的过程
看了上面的例子可能还是有点蒙,再看例子:我们要给所有的添加业务加入权限校验的业务处理。那么看下面的图理解上面的概念:
图有点乱,听我一个一个解释:
① Aspect中包含了 Pointcut和Advice。 Pointcut就是一个规定,或者说描述,说明我们要织入切面的具体规定。 Advice就是我们要执行的切面业务。
②Join point,在我们上面的例子中,J oint point就是我们要执行的所有的业务方法,也就是上面的两个业务对象中的四个方法。
③Target(目标对象),这个就不用多解释了。
④ 织入器,织入器会根据Pointcut的描述从Joint point中找到符合要求的织入点,将Advice织入到对应的位置。
说道这里希望你对上面的几个概念有所了解。
接下来我们来看看,Advice的几个类型:
[1] before advice(前置通知)
在 join point 前被执行的 advice. 虽然 before advice 是在 join point 前被执行, 但是它并不能够阻止 join point 的执行, 除非发生了异常(即我们在 before advice 代码中, 不能人为地决定是否继续执行 join point 中的代码)
[2]after return advice (后置通知)
在一个 join point 正常返回后执行的 advice
[3]after throwing advice(异常通知)
当一个 join point 抛出异常后执行的 advice
[4]after(final) advice(最终通知)
无论一个 join point 是正常退出还是发生了异常, 都会被执行的 advice.
[5]around advice(环绕通知)
在 join point 前和 joint point 退出后都执行的 advice. 这个是最常用的 advice.