方面和方法有什么区别? [AOP]
What is the difference between an Aspect and a Method? [AOP]
我知道这一定是有史以来最简单的问题,但作为 AOP 的新手,我无法理解它。
- 方面和方法有什么区别?
在其提到的文档中:
Aspects enable the modularization of concerns such as transaction management that cut across multiple types and objects.
"the modularizations of concerns" 听起来像是为更具体的程序制作更多方法,
- 是吗?如果不是,为什么不同?
"that cut across multiple types and objects" 在我看来这些方法是全局的并且可以从其他 类 访问,我几乎可以肯定这是不正确的。然而,分别提到类型和对象也让我有点困惑。
- 当提到对象时,这些只是 POJO 的吗?
- 如果这些不仅仅是对象,类型是什么意思?
提前致谢
Aspect 通过配置而不是编程方式向方法(或方法的所有 类 添加行为)。配置可以在 XML 或其他任何地方完成,但最好的例子是注释,例如你可以有一个方法 :
@Audit
public Integer doSomething(String parameter) {
//Something is happening here
}
只需添加@Audit
注解即可添加记录输入参数、输出值和执行时间的行为。为此,您可以创建拦截器并将拦截器应用于具有注释的方法。这只是一个例子,你可以用它来实现事务、缓存、断路器和许多其他东西。
在您的拦截器中,您有一个普通方法,该方法将 ProceedingJoinPoint 作为参数(假设您使用的是 AspectJ),它包含有关该方法的信息,您可以在其上调用 proceed() 来实际调用该方法,这允许您在方法调用之前和之后填充,可能会更改参数或 return 值,甚至可能根本不调用该方法(例如在缓存的情况下)。
方面的最大好处是您编写一次拦截器,然后很容易通过配置将行为添加到您想要的任何方法。
P.S。 : 当他们说类型和对象时,我认为您应该将其理解为接口和实现,就像您可以将行为添加到 List 的所有实现或仅添加到 ArrayList。
方面是关注点、切入点和连接点。
- cross-cutting 关注点的实现称为 关注点
- class 中明确定义的位置是 Joinpoint
- 通过配置或代码指定连接点的地方是切入点
一个方法是一个连接点。
对象是类型的实例。
我知道这一定是有史以来最简单的问题,但作为 AOP 的新手,我无法理解它。
- 方面和方法有什么区别?
在其提到的文档中:
Aspects enable the modularization of concerns such as transaction management that cut across multiple types and objects.
"the modularizations of concerns" 听起来像是为更具体的程序制作更多方法,
- 是吗?如果不是,为什么不同?
"that cut across multiple types and objects" 在我看来这些方法是全局的并且可以从其他 类 访问,我几乎可以肯定这是不正确的。然而,分别提到类型和对象也让我有点困惑。
- 当提到对象时,这些只是 POJO 的吗?
- 如果这些不仅仅是对象,类型是什么意思?
提前致谢
Aspect 通过配置而不是编程方式向方法(或方法的所有 类 添加行为)。配置可以在 XML 或其他任何地方完成,但最好的例子是注释,例如你可以有一个方法 :
@Audit
public Integer doSomething(String parameter) {
//Something is happening here
}
只需添加@Audit
注解即可添加记录输入参数、输出值和执行时间的行为。为此,您可以创建拦截器并将拦截器应用于具有注释的方法。这只是一个例子,你可以用它来实现事务、缓存、断路器和许多其他东西。
在您的拦截器中,您有一个普通方法,该方法将 ProceedingJoinPoint 作为参数(假设您使用的是 AspectJ),它包含有关该方法的信息,您可以在其上调用 proceed() 来实际调用该方法,这允许您在方法调用之前和之后填充,可能会更改参数或 return 值,甚至可能根本不调用该方法(例如在缓存的情况下)。
方面的最大好处是您编写一次拦截器,然后很容易通过配置将行为添加到您想要的任何方法。
P.S。 : 当他们说类型和对象时,我认为您应该将其理解为接口和实现,就像您可以将行为添加到 List 的所有实现或仅添加到 ArrayList。
方面是关注点、切入点和连接点。
- cross-cutting 关注点的实现称为 关注点
- class 中明确定义的位置是 Joinpoint
- 通过配置或代码指定连接点的地方是切入点
一个方法是一个连接点。
对象是类型的实例。