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



我知道这一定是有史以来最简单的问题,但作为一个完全不熟悉AOP的人,我无法理解它。

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

在文档中提到:

方面使关注点模块化,例如跨越多种类型和对象的事务管理。

在我看来,"关注点的模块化"听起来就像是为更具体的程序制作更多方法,

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

"跨越多种类型和对象"对我来说听起来像这些方法是全局的,可以从其他类访问,我几乎可以肯定这是不正确的。但是,单独提到类型和对象也让我在这里有点困惑。

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

提前致谢

方面关注点、切入点连接点的关联。

  • 跨领域关切的实施称为关注
  • 类中要附加问题的明确定义的位置是连接点
  • 通过配置或代码指定连接点的位置是切入点

方法是一个连接点

对象类型的实例。

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

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

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

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

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

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

最新更新