有谁知道AspectJ和PostSharp之间的AOP功能有什么不同(是的,我知道它们适用于不同的语言和平台)?
我试图了解AspectJ允许PostSharp不会做什么样的事情,反之亦然。
答案 0 :(得分:4)
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”功能。
答案 1 :(得分: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提供了更大的灵活性,因为连接点可能明显更复杂,以便做到你想要的。
例如,使用PostSharp无法完成cflow。
就像Spring一样,它是AOP的简化版本,以便于使用。
更新:虽然我不相信它已完全更新,但对于AspectJ支持的内容,这是一个好主意: http://www.eclipse.org/aspectj/doc/released/progguide/index.html