繁体   English   中英

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

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

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

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

在文档中提及:

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

对我来说,“关注的模块化”听起来就像只是为更具体的过程提供了更多的方法一样,

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

对我来说,“跨越多种类型和对象”听起来像这些方法是全局的,并且可以从其他类访问,我几乎可以肯定这是不正确的。 但是,分别提及类型和对象也使我有些困惑。

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

提前致谢

Aspect关注点切入点和连接点的关联

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

方法联接点

对象Type的实例。

Aspect通过配置而不是通过编程将行为添加到方法(或方法的所有类)中。 可以用XML或其他任何方式进行配置,但最好的示例是带有注释,例如您可以有一个方法:

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

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

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

方面的最大好处是您只需编写一次拦截器,然后就可以很容易地通过配置将行为添加到所需的任何方法中。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM