代码之家  ›  专栏  ›  技术社区  ›  LBushkin

AspectJ和PostSharp之间的功能差异是什么?

  •  3
  • LBushkin  · 技术社区  · 15 年前

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

    我试图理解Aspectj会允许Postsharp不允许的事情,反之亦然。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Gael Fraiteur    15 年前

    Postsharp2.0比Postsharp1.5更接近AspectJ。将Postsharp 1.5与Spring AOP进行比较是合理的,但与Postsharp 2.0的比较不再是合理的。

    然而,在方法上仍然存在一些强烈的差异。

    1. 切入点的方法完全不同。AspectJ提供了一种复杂的切入点语言。Postshap提供了一个基本的声明性切入点系统 但是 使您能够开发必要的切入点,因此您可以编写代码(通常使用System.Reflection),在编译时评估切入点。因此,PostSharp不支持切入点语言,而是支持普通的C或LINQ。

    2. 实际上没有条件切入点(cflow)。

    3. Postshap支持高阶语义,如事件和属性。据我所知,AspectJ没有(因为Java AFAK中没有事件或属性)。

    4. Postshap特性通常在构建时实例化和初始化,然后序列化到程序集中,并在运行时反序列化以执行。这允许方面在构建时“初始化”,因此运行时性能更好。它还允许在构建时执行任意复杂的逻辑(通常是初始化、切入点评估、连接点验证)。

    5. PostSharp对方面构成有真正的支持,也就是说,您可以预测性地将多个方面或建议应用到同一个接合点。Postshap是为多供应商场景而设计的,多个方面的供应商彼此不了解。它有一个复杂的依赖系统,在这个系统中,方面开发人员/供应商可以声明性地指定排序约束、需求和冲突。

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

        2
  •  2
  •   James Black    15 年前

    从他们的Postshap文档中: http://doc.postsharp.org/1.5/##PostSharp.HxS/UserGuide/Laos/AspectKinds/Overview.html

    支持的连接点类型: http://doc.postsharp.org/1.5/##PostSharp.HxS/UserGuide/CoreLibrary/CodeWeaver/Overview.html

    AspectJ提供了更大的灵活性,因为连接点可以明显地更加复杂,以满足您的需要。

    例如,cflow似乎不能用postsharp来完成。

    就像Spring一样,它是AOP的精简版,以便更容易使用。

    更新:虽然我不相信它是完全更新的,但这是AspectJ支持的一个好主意: http://www.eclipse.org/aspectj/doc/released/progguide/index.html

    推荐文章