方面和方法有什么区别? [AOP]

What is the difference between an Aspect and a Method? [AOP]

我知道这一定是有史以来最简单的问题,但作为 AOP 的新手,我无法理解它。

  1. 方面和方法有什么区别?

在其提到的文档中:

Aspects enable the modularization of concerns such as transaction management that cut across multiple types and objects.

"the modularizations of concerns" 听起来像是为更具体的程序制作更多方法,

  1. 是吗?如果不是,为什么不同?

"that cut across multiple types and objects" 在我看来这些方法是全局的并且可以从其他 类 访问,我几乎可以肯定这是不正确的。然而,分别提到类型和对象也让我有点困惑。

  1. 当提到对象时,这些只是 POJO 的吗?
  2. 如果这些不仅仅是对象,类型是什么意思?

提前致谢

Aspect 通过配置而不是编程方式向方法(或方法的所有 类 添加行为)。配置可以在 XML 或其他任何地方完成,但最好的例子是注释,例如你可以有一个方法 :

@Audit
public Integer doSomething(String parameter) {
    //Something is happening here
}

只需添加@Audit注解即可添加记录输入参数、输出值和执行时间的行为。为此,您可以创建拦截器并将拦截器应用于具有注释的方法。这只是一个例子,你可以用它来实现事务、缓存、断路器和许多其他东西。

在您的拦截器中,您有一个普通方法,该方法将 ProceedingJoinPoint 作为参数(假设您使用的是 AspectJ),它包含有关该方法的信息,您可以在其上调用 proceed() 来实际调用该方法,这允许您在方法调用之前和之后填充,可能会更改参数或 return 值,甚至可能根本不调用该方法(例如在缓存的情况下)。

方面的最大好处是您编写一次拦截器,然后很容易通过配置将行为添加到您想要的任何方法。

P.S。 : 当他们说类型和对象时,我认为您应该将其理解为接口和实现,就像您可以将行为添加到 List 的所有实现或仅添加到 ArrayList。

方面关注点切入点连接点

  • cross-cutting 关注点的实现称为 关注点
  • class 中明确定义的位置是 Joinpoint
  • 通过配置或代码指定连接点的地方是切入点

一个方法是一个连接点

对象类型的实例。