Spring Boot AOP

 

该应用程序通常是多层开发的。典型的Java应用程序具有以下几层:

  • Web层: 它使用REST或Web应用程序公开服务
  • 业务层: 它实现了应用程序的业务逻辑
  • 数据层: 它实现了应用程序的持久性逻辑

每层的职责不同,但是有一些适用于所有层的常见方面是 日志记录,安全性,验证,缓存等。这些常见方面被称为 跨领域关注点。

如果我们分别在每一层中实现这些关注点,则代码将变得更加难以维护。为了克服这个问题, 面向方面的编程(AOP)提供了一种解决跨领域问题的解决方案。

  • 将跨领域关注作为一个方面。
  • 定义切入点以指示必须在何处应用方面。

它确保跨领域关注点在一个内聚的代码组件中定义。

 

AOP

AOP (Aspect-Oriented Programming)是一种通过允许 跨领域关注点分离来提高模块化的编程模式。这些跨部门关注点与主要业务逻辑不同。我们可以在不修改代码本身的情况下向现有代码添加其他行为。

Spring的AOP框架可帮助我们实现这些跨领域的关注。

使用AOP,我们在一个地方。我们可以自由定义应用此功能的方式和位置,而无需修改应用新功能的类。现在,可以将横切关注点模块化为特殊类,称为 方面

方面有 两个的优点:

  • 首先,每个关注点的逻辑现在都集中在一个地方,而不是分散在整个代码库中。
  • 其次,业务模块仅包含主要关注的代码。次要关注点已移至方面

各个方面都有要执行的职责,称为 Advice。我们可以在一个或多个连接点将方面的功能实现到程序中。

 

AOP的优点

  • 它是用纯Java实现的。
  • 不需要特殊的编译过程。
  • 它仅支持方法执行连接点。
  • 仅提供运行时编织。
  • 有两种类型的AOP代理: JDK动态代理 CGLIB代理。

 

跨领域关注点

跨领域关注点是我们要在应用程序中的多个位置实现的关注点。它会影响整个应用程序。

 

AOP术语

  • Aspect: 方面是一个模块,其中封装了advicepointcuts,并提供cross-cutting可以有许多方面。我们可以使用带有 @Aspect 批注的常规类来实现方面。
  • Pointcut: 切入点是一种表达式,它选择一个或多个执行Advice的连接点。我们可以使用expressionspatterns定义切入点。它使用与联接点匹配的不同类型的表达式。在Spring Framework中,使用 AspectJ 切入点表达语言。
  • Join point: 连接点是应用程序中应用 AOP方面的点。或者它是Advice的特定执行实例。在AOP中,连接点可以是方法执行,异常处理,更改对象变量值等。
  • Advice: Advice是我们在方法执行之前beforeafter采取的措施。该动作是在程序执行期间调用的一段代码。SpringAOP框架中有五种类型的Advice: 在Advicebefore, after, after-returning, after-throwing和around advice。 是针对特定join point的Advice。 我们将在本节中进一步讨论这些Advice。
  • Target object: 一个应用了Advice的对象称为target object。目标对象始终是proxied,这意味着在运行时将创建一个覆盖目标方法的子类,并根据其配置包含Advice。
  • Weaving: 这是将各个方面与其他应用程序类型进行linking aspects的过程。我们可以在运行时,加载时间编译时进行织造。

Proxy: 它是在将Advice应用于目标对象后创建的对象,称为 proxy 。 Spring AOP实现了 JDK动态代理,以使用目标类和Advice调用创建代理类。这些称为AOP代理类。

 

AOP与OOP

AOP与OOP之间的区别如下:

AOP OOP
Aspect: 一个封装切入点,Advice和属性的代码单元。 Class: 一个封装方法和属性的代码单元。
Pointcut: 它定义了执行Advice的一组入口点。 Method signature: 。它定义了执行方法主体的入口点。
Advice: 这是跨领域关注点的实现。 Method bodies: 是业务逻辑问题的实现。
Waver: 借助Advice构造代码(源或对象)。 Compiler: 它将源代码转换为目标代码。

Spring Boot AOP

 

Spring AOP与AspectJ

AOP和OOP之间的区别如下:

Spring AOP AspectJ
需要单独的编译过程。 它需要AspectJ编译器。
它仅支持方法执行切入点。 它支持所有切入点。
它可以在Spring Container管理的bean上实现。 它可以在所有域对象上实现。
它仅支持方法级编织。 它可以波动字段,方法,构造函数,静态初始化器,最终类等。

 

AOP Advice的类型

AOP Advice有五种类型,如下所示:

  • Before Advice
  • After Advice
  • Around Advice
  • After Throwing
  • After Returning

Before Advice: 在连接点之前执行的Advice在通知之前被调用。我们使用 @Before 批注将Advice标记为Before通知。

After Advice: 在连接点之后执行的Advice被称为after notification。我们使用 @After 注解将Advice标记为After通知。

Around Advice: 在连接点之前和之后执行的Advice是

After Throwing: 在连接点抛出异常时执行的Advice。

After Returning: 当方法成功执行时执行的Advice。

在应用程序中实现AOP之前,我们需要在pom.xml文件中添加 Spring AOP 依赖项。

 

Spring Boot Starter AOP

Spring Boot Starter AOP是提供Spring AOP和AspectJ的依赖项。 AOP提供基本的AOP功能,而AspectJ提供完整的AOP框架。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>

在下一节中,我们将在应用程序中实现不同的Advice。

SpringBoot AOP @Before注解说明和示例 SpringBoot AOP @After注解说明和示例 SpringBoot AOP @Around注解说明和示例 SpringBoot AOP @AfterReturning注解说明和示例 SpringBoot AOP @AfterThrowing注解说明和示例

 什么是JPA? Spring Boot JPA 是用于管理的Java规范Java应用程序中的关系数据。它允许我们访问和持久化Java对象/类与关系数据库之间的数据。 JPA遵循对象关系映射(ORM ...