📜  Spring Boot – AOP 和 AspectJ 的区别

📅  最后修改于: 2022-05-13 01:55:22.781000             🧑  作者: Mango

Spring Boot – AOP 和 AspectJ 的区别

Spring Boot 建立在 Spring 之上,包含了 Spring 的所有特性。并且由于其快速的生产就绪环境使开发人员能够直接专注于逻辑而不是为配置和设置而苦苦挣扎,如今它正成为开发人员的最爱。 Spring Boot 是一个基于微服务的框架,在其中制作可用于生产的应用程序只需要很少的时间。以下是 Spring Boot 的一些特性:

  • 它允许避免在 spring 中存在的 XML 的繁重配置
  • 它提供易于维护和创建 REST 端点
  • 它包括嵌入式 Tomcat 服务器
  • 部署非常简单,war和jar文件可以轻松部署在tomcat服务器中

AOP

让我们了解一些术语:

  • 方面:独立的不同模块称为方面。例如——日志方面。
  • 连接点:这是可以注入方面以执行特定任务的点。
  • 忠告:它是实际的代码块,将在方法执行之前或之后执行。
  • 切入点:它是一组一个或多个连接点,实际代码将在其中执行。切入点是使用表达式或模式指定的。

请参见以下示例:

Java
@Aspect
public class LoggingAspectPointCutExample{
  @PointCut("execution(*java11.fundamentals.*.*(...))")
  private void logData() {}
}


在上面的例子中,我们使用了一些注解。让我们了解它们的含义。

  1. @Aspect:此注解指定该类包含通知方法
  2. @PointCut:此注解指定应执行通知的 JoinPoint。
  3. execution (*java11.fundamentals.*.*(..)):这详细说明了应该应用给定建议的方法
  4. 简介:这允许将新方法、字段或属性包含到现有类中。它在AspectJ中也称为类型间声明。换句话说,通过介绍,方面可以断言建议的对象来实现特定的接口。它还可以提供此接口的实现。
  5. 目标对象:它指定一个或多个方面正在建议的对象。该对象将始终是代理对象,因为 Spring AOP 是使用运行时代理实现的。
  6. AOP 代理:表示实现切面契约的对象。
  7. 编织:这是一个通过将一个或多个方面与其他对象或应用程序类型链接来创建建议对象的过程。它可以通过多种方式完成,例如编译、加载或运行时。 Spring AOP 在运行时执行穿戴。

方面J

AspectJ 指的是一种将切面声明为带有注解的常规Java类的风格。 Spring 解释与 AspectJ 5 相同的注释,使用 AspectJ 提供的库进行切入点解析和匹配。 AOP 运行时仍然是纯 Spring AOP,并且不依赖于 AspectJ 编译器或编织器。

AOP 和 AspectJ 的区别

Spring AOP

AspectJ AOP

It is not intended as a complete AOP solution – it can only be applied to beans that are managed by a Spring container.AspectJ is the original AOP technology that aims to provide a complete AOP solution.
It makes use of runtime weaving.It makes use of three different types of weaving: Compile-time weaving, Post-compile weaving, Load-time weaving.

It is a proxy-based AOP framework. This means that to implement aspects to the target objects, it’ll create proxies of that object. This is achieved using either of two ways:

JDK dynamic proxy, CGLIB proxy.

On the other hand, this doesn’t do anything at runtime as the classes are compiled directly with aspects.

And so unlike Spring AOP, it doesn’t require any design patterns.

It is much slower than AspectJ. It has better performance.
It is easy to learn and apply.It is more complicated than Spring AOP.