有谁知道 AspectJ 和 PostSharp 之间的 AOP 特性有什么不同(是的,我知道它们适用于不同的语言和平台)?

我试图了解 AspectJ 允许 PostSharp 不允许的类型,反之亦然。

最佳答案

PostSharp 2.0 比 PostSharp 1.5 更接近 AspectJ。将 PostSharp 1.5 与 Spring AOP 进行比较是合理的,但与 PostSharp 2.0 相比则不再适用。

但是,在方法上仍然存在一些很大的差异。

  • 切入点的方法完全不同。 AspectJ 提供了一种复杂的切入点语言。 PostSharp 提供了一个基本的声明式切入点系统,但使您能够开发命令式切入点,因此您可以编写代码(通常使用 System.Reflection)在编译时评估切入点。因此,PostSharp 不支持切入点语言,而是支持普通的 C# 或 Linq。
  • 确实没有条件切入点(cflow)。
  • PostSharp 支持高阶语义,如事件和属性。据我所知,AspectJ 没有(因为 Java afaik 中没有事件或属性)。
  • PostSharp 方面通常在构建时实例化和初始化,然后序列化到程序集中,并在运行时反序列化以执行。这允许方面在构建时“初始化”,因此运行时性能更好。它还允许在构建时执行任意复杂的逻辑(通常是初始化、切入点评估、连接点验证)。
  • PostSharp 真正支持方面组合,即您可以以预测方式将多个方面或建议应用于同一个连接点。 PostSharp 是为多供应商场景而设计的,其中多个方面的供应商互不了解。它有一个复杂的依赖关系系统,其中方面开发人员/供应商可以声明性地指定排序约束、需求和冲突。

  • 从 2.0 版开始,PostSharp 带有 IDE 工具,该工具部分涵盖了 Eclipse 的“AJDT”功能。

    关于java - AspectJ 和 PostSharp 之间的功能区别是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1602803/

    10-10 09:08