[英]What is the difference between an Aspect and a Method? [AOP]
我知道这肯定是有史以来最简单的问题,但是作为一个完全不熟悉AOP的人,我无法理解。
在文档中提及:
方面使关注点模块化,例如跨多种类型和对象的事务管理。
对我来说,“关注的模块化”听起来就像只是为更具体的过程提供了更多的方法一样,
对我来说,“跨越多种类型和对象”听起来像这些方法是全局的,并且可以从其他类访问,我几乎可以肯定这是不正确的。 但是,分别提及类型和对象也使我有些困惑。
提前致谢
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.