AOP编程(面向切面编程)

   详细讲解

一、类与切面的比较

   1、面向对象编程(OOP):操作对象即为类;
     面向切面编程(AOP):操作对象即为切面。

   类是纵向的,而切面是横向的。 当多个类中有相同部分并需要对该部分操作时;如果是面向对象编程,则需要获取所有类,进而获取部分进行操作,当有多个类时就变得相当复杂麻烦;而面向切面编程,可一次性直接获取所有类中的相同部分作为切面,直接进行操作。

     如下图,就是类的操作模式; 此时,相同部分过多造成代码重复性太高。
在这里插入图片描述
     这时,可使用调用公共接口的方法,形成如下图:
在这里插入图片描述
     但调用公共方法的操作需要在每个类中进行调用,这也促进了 “切面” 的概念;如下图:
在这里插入图片描述
很容易看出,这大大了减少了代码重复率,也简化了很多。

   2、OOP编程的最小操作单位是类,而AOP编程的最小单位是类中的片段(即为切面)。

二、AOP编程的相关概念

  • Aspect(切面): Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 切入点与相应的增强。
  • joint point(连接点):表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它连接点。
  • Point cut(切点):表示一组连接点,这些连接点或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的增强将要发生的地方。
  • Advice(增强):在切点里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。
  • Target(目标对象):织入 Advice 的目标对象.。
  • Weaving(织入):将 Aspect和其他对象连接起来, 并创建 Adviced object 的过程。

   例子:

	从前有一个叫爪哇的小县城, 在一个月黑风高的晚上, 这个县城中发生了命案. 作案的凶手十分狡猾, 现场没有留下什么有价值的线索。
不过万幸的是,刚从隔壁回来的老王恰好在这时候无意中发现了凶手行凶的过程, 但是由于天色已晚, 加上凶手蒙着面, 老王并没有看清凶手的
面目, 只知道凶手是个男性, 身高约七尺五寸. 爪哇县的县令根据老王的描述, 对守门的士兵下命令说: 凡是发现有身高七尺五寸的男性, 都要
抓过来审问. 士兵当然不敢违背县令的命令, 只好把进出城的所有符合条件的人都抓了起来。

在这里插入图片描述

三、AOP编程的五种增强通知

	前置增强:org.springframework.aop.BeforeAdvice是前置增强顶层接口,因为Spring只支持方法的增强,其子接口
MethodBeforeAdvice是目前可用的前置增强。表示在目标方法执行前实施增强
	后置增强:org.springframework.aop.AfterReturningAdvice是目前可用的后置增强,表示在目标方法执行后实施增强
	环绕增强:org.aopalliance.intercept.MethodInterceptor代表了环绕增强,表示在目标方法执行前后实施增强。直接使用了AOP联
盟定义的接口
	异常抛出增强:org.springframework.aop.ThrowsAdvice代表了异常抛出增强,表示在目标方法抛出异常后实施增强
	引介增强:org.springframework.aop.IntroductionInterceptor代表引介增强,表示在目标类中添加一些新的方法和属性后增强

四、AOP编程的使用

   参考教程

   依赖包

发布了54 篇原创文章 · 获赞 19 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41970025/article/details/90289469