【Spring】(8)AOP - 简单介绍

【Spring】(8)AOP - 简单介绍

一、什么是 AOP

在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

在这里插入图片描述

AOP和IoC一样,也是一种思想,是Spring Framework的核心。

二、AOP 在Spring中的作用

AOP is used in the Spring Framework to:

  • Provide declarative enterprise services. The most important such service is declarative transaction management.
  • Let users implement custom aspects, complementing their use of OOP with AOP.

作用:

  • 提供声明式事务
  • 允许用户自定义切面

三、AOP 概念

1.AOP术语概念

AOP 中的术语概念。

横切关注点:跨越应用程序多个模块的方法或功能。是与我们业务逻辑无关的,但是我们需要关注的部分,就是横切关注点。如:日志、安全、缓存、事务等等...

  • Aspect(切面 ):涉及多个类别的关注点的模块化。事务管理是企业Java应用程序中横切关注的一个很好的例子。(横切关注点 被模块化的特殊对象。切面就是一个类)

  • Advice(通知 | 建议):方面在特定的连接点处采取的操作。不同类型的通知包括“around环绕”,“before之前”和“after之后”建议(通知)。 (切面必须完成的工作。它是类中的一个方法。)

  • Join point(连接点): 程序执行过程中的一个点,例如方法执行或异常处理。在Spring AOP中,连接点始终代表方法的执行。(与切入点匹配的执行点,也就是方法在什么地方执行)

  • Pointcut(切点): 与连接点匹配的谓词。建议与切入点表达式关联,并在与该切入点匹配的任何连接点处运行(例如,执行具有特定名称的方法)。切入点表达式匹配的连接点的概念是AOP的核心,并且Spring默认使用AspectJ切入点表达语言。(切面通知执行的 "地点" 定义)

  • Target object(目标对象): 一个或多个方面通知的对象。也称为“通知对象”。由于Spring AOP是使用运行时代理实现的,因此该对象始终是代理对象。(被通知的对象)

  • AOP proxy(代理):由AOP框架创建的一个对象,用于实现方面协定(通知方法执行等)。在Spring Framework中,AOP代理是JDK动态代理或CGLIB代理。(向目标对象应用通知之后创建的对象)

在这里插入图片描述

2.AOP五种通知(Advice)

  • 前置通知(Before advice):在连接点之前运行的通知,但是它不能阻止执行流程继续进行到连接点(除非它引发异常)。(方法前加一个通知)
  • 后置通知(After returning advice):在连接点正常完成之后要运行的通知(例如,如果一个方法没有抛出异常而返回)。(方法后加一个通知)
  • 环绕通知(Around advice):围绕连接点的建议,例如方法调用。(方法前后加通知)
  • 异常抛出通知(After throwing advice):如果方法因抛出异常而退出,则执行通知。(方法抛出异常加一个通知)
  • ==引介(最终)通知(After (finally) advice):无论连接点退出的方式如何(正常或特殊返回),均应执行建议。(类中增加新的方法属性)==

围绕建议是最通用的建议。由于Spring AOP与AspectJ一样,提供了各种建议类型,因此我们建议您使用功能最弱的建议类型,以实现所需的行为。例如,如果您只需要使用方法的返回值更新缓存,则最好使用返回后的建议而不是周围的建议,尽管周围的建议可以完成相同的事情。使用最具体的建议类型可提供更简单的编程模型,并减少潜在的错误。
在这里插入图片描述

参考:Spring入门学习(六)