Spring AOP 教程

2024 年 8 月 29 日 | 阅读 3 分钟

面向切面编程 (AOP) 补充了 OOPs,因为它也提供了模块化。 但模块化的关键单元是切面而不是类。

AOP 将程序逻辑分解为不同的部分(称为关注点)。 它用于通过横切关注点来提高模块化。

横切关注点是可能影响整个应用程序的关注点,并且应尽可能集中在代码中的一个位置,例如事务管理、身份验证、日志记录、安全性等。


为什么要使用 AOP?

它提供了一种可插拔的方式,可以在实际逻辑之前、之后或周围动态添加额外的关注点。 假设一个类中有 10 个方法,如下所示

有 5 个方法以 m 开头,2 个方法以 n 开头,3 个方法以 p 开头。

理解场景 在调用以 m 开头的方法后,我必须维护日志并发送通知。

没有 AOP 的问题 我们可以从以 m 开头的方法调用(维护日志并发送通知的)方法。 在这种情况下,我们需要在所有 5 个方法中编写代码。

但是,如果客户将来表示,我不需要发送通知,您需要更改所有方法。 这会导致维护问题。

使用 AOP 的解决方案 我们不必从该方法调用方法。 现在,我们可以定义附加的关注点,例如在一个类的方法中维护日志、发送通知等。 它的条目在 xml 文件中给出。

将来,如果客户说要删除通知器功能,我们只需要在 xml 文件中进行更改。 因此,在 AOP 中维护很容易。


哪里使用 AOP?

AOP 主要用于以下情况

  • 提供声明式企业服务,例如声明式事务管理。
  • 它允许用户实现自定义切面。

AOP 概念和术语

AOP 概念和术语如下

  • 连接点
  • Advice
  • 切入点
  • 引言
  • 目标对象
  • 方面
  • 拦截器
  • AOP 代理
  • 编织

连接点

连接点是程序中的任何点,例如方法执行、异常处理、字段访问等。 Spring 仅支持方法执行连接点。


Advice

Advice 表示切面在特定连接点采取的动作。 有不同类型的 advice

  • 前置增强:它在连接点之前执行。
  • 返回后增强:它在连接点正常完成后执行。
  • 抛出后增强:如果方法通过抛出异常退出,则执行该方法。
  • After (finally) 增强:无论连接点退出是正常还是异常返回,它都会在连接点之后执行。
  • 环绕增强:它在连接点之前和之后执行。

切入点

它是 AOP 的一种表达式语言,用于匹配连接点。


引言

这意味着为类型引入附加的方法和字段。 它允许您将新接口引入到任何被增强的对象。


目标对象

它是被一个或多个切面增强的对象。 在 Spring 中也称为代理对象,因为 Spring AOP 是使用运行时代理实现的。


方面

它是一个包含 advice、连接点等的类。


拦截器

它是一个仅包含一个 advice 的切面。


AOP 代理

它用于实现 AOP 框架创建的切面契约。 它将是 Spring 框架中的 JDK 动态代理或 CGLIB 代理。


编织

它是将切面与其他应用程序类型或对象链接以创建增强对象的过程。 织入可以在编译时、加载时或运行时完成。 Spring AOP 在运行时执行织入。


AOP 实现

AOP 实现由以下提供

  1. AspectJ
  2. Spring AOP
  3. JBoss AOP

Spring AOP

Spring AOP 可以通过以下 3 种方式使用。 但使用最广泛的方法是 Spring AspectJ 注解风格。 使用 Spring AOP 的 3 种方式如下

  1. 通过 Spring1.2 旧样式(基于 dtd)(Spring3 也支持)
  2. 通过 AspectJ 注解样式
  3. 通过 Spring XML 配置样式(基于 schema)

参考链接

Spring Source AOP
Spring Source AOP API
维基百科
下一个主题Spring AOP 示例