Aspect和Method之间有什么区别? [AOP]

时间:2018-03-21 17:26:15

标签: java aop spring-aop

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

  1. Aspect和Method之间有什么区别?
  2. 在其提到的文件中:

      

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

    “关注点的模块化”听起来像是为更具体的程序制作更多方法,

    1. 是吗?如果不是为什么它有什么不同呢?
    2. “跨越多种类型和对象”对我来说听起来像这些方法是全局的并且能够从其他类访问,我几乎肯定这是不正确的。然而,单独提及类型和对象也让我有点困惑。

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

2 个答案:

答案 0 :(得分:2)

Aspect 关注切入点加入点的关联。

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

方法加入点

对象类型的实例。

答案 1 :(得分:1)

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

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

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

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

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

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