【问题标题】:What are the functional differences between AspectJ and PostSharp?AspectJ 和 PostSharp 之间的功能差异是什么?
【发布时间】:2009-10-22 15:51:38
【问题描述】:

有谁知道 AspectJ 和 PostSharp 之间的 AOP 功能有哪些不同(是的,我知道它们适用于不同的语言和平台)?

我试图了解 AspectJ 允许 PostSharp 不允许的哪些事情,反之亦然。

【问题讨论】:

    标签: java .net aop postsharp


    【解决方案1】:

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

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

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

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

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

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

    5. PostSharp 真正支持方面组合,即您可以以预测的方式将多个方面或建议应用于同一个连接点。 PostSharp 专为多供应商场景而设计,其中多个方面供应商彼此不了解。它有一个复杂的依赖系统,方面开发人员/供应商可以声明性地指定排序约束、要求和冲突。

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

    【讨论】:

      【解决方案2】:

      来自他们的 PostSharp 文档: 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

      【讨论】:

      • 您是否有类似的 AspectJ 链接来记录支持的连接点?
      • AspectJ 不断变化,文档滞后,所以最好的办法是从 Manning Publications 获得这本书:manning.com/laddad2。 AspectJ 有足够的灵活性,让自己很容易被束缚。
      • PostSharp 2.1 文档链接:doc.sharpcrafters.com/postsharp-2.1/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多