我知道这肯定是有史以来最简单的问题,但是作为AOP的新手,我无法理解。
方面和方法之间有什么区别?
在文档中提及:
Aspects enable the modularization of concerns such as transaction management that cut across multiple types and objects.
对我来说,"关注的模块化"听起来就像只是为更具体的过程提供了更多的方法,
是吗? 如果没有,为什么会有什么不同呢?
对我来说,"跨越多种类型和对象"听起来像这些方法是全局的,并且可以从其他类访问,我几乎可以肯定这是不正确的。 但是,分别提及类型和对象也使我有些困惑。
当提到对象时,这些只是POJO吗?
如果这些不仅仅是对象,那么类型的含义是什么?
提前致谢
实际上,这不是一个非常适合StackOverflow的问题,因为您没有提出任何人都可以解决的具体编程问题。 但是也许您发现我的旧帖子对您有所帮助。
方面是关注点,切入点和连接点的关联。
跨部门关注点的实施称为关注点
类中要附加关注点的明确定义的位置是连接点
通过配置或代码指定连接点的位置是切入点
方法是联接点。
对象是类型的实例。
Aspect通过配置而不是通过编程将行为添加到方法(或方法的所有类)中。可以用XML或其他任何方式进行配置,但最好的示例是带有注释,例如您可以有一个方法:
@Audit
public Integer doSomething(String parameter) {
//Something is happening here
}
简单地添加@Audit批注将添加记录输入参数,输出值和执行时间的行为。然后,您可以通过创建一个拦截器并将拦截器应用于具有批注的方法来做到这一点。这只是一个示例,您可以使用它来实现事务,缓存,断路器以及许多其他功能。
在拦截器中,您有一个普通方法,该方法以ProceedingJoinPoint(假设您正在使用AspectJ)作为参数,该方法包含有关该方法的信息,并且您可以在该方法上调用proceed()来实际调用该方法,这使您可以前后填充方法调用,可能会更改参数或返回值,甚至可能根本不调用该方法(例如在缓存的情况下)。
方面的最大好处是您只需编写一次拦截器,然后就可以很容易地通过配置将行为添加到所需的任何方法中。
附言:当他们说类型和对象时,我认为您应该将其理解为接口和实现,就像您可以将行为添加到List的所有实现或仅添加到ArrayList一样。
本文解释了面向切面编程(AOP)的基本概念,包括方面、切入点、连接点等,并通过示例说明了如何使用AOP来简化关注点的实现。

被折叠的 条评论
为什么被折叠?



