Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java AspectJ和PostSharp之间的功能区别是什么?_Java_.net_Aop_Postsharp - Fatal编程技术网

Java AspectJ和PostSharp之间的功能区别是什么?

Java AspectJ和PostSharp之间的功能区别是什么?,java,.net,aop,postsharp,Java,.net,Aop,Postsharp,有人知道AspectJ和PostSharp的AOP特性有什么不同吗(是的,我知道它们适用于不同的语言和平台) 我试图了解AspectJ会允许哪些事情,PostSharp不会,反之亦然。从他们的PostSharp文档中: 支持的连接点类型: AspectJ提供了更大的灵活性,因为连接点可以更加复杂,以实现您想要的功能 例如,cflow似乎不能用PostSharp完成 它与Spring类似,因为它是AOP的精简版本,以使其更易于使用 更新:虽然我不认为它已经完全更新,但这是一个关于AspectJ

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


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

从他们的PostSharp文档中:

支持的连接点类型:

AspectJ提供了更大的灵活性,因为连接点可以更加复杂,以实现您想要的功能

例如,cflow似乎不能用PostSharp完成

它与Spring类似,因为它是AOP的精简版本,以使其更易于使用

更新:虽然我不认为它已经完全更新,但这是一个关于AspectJ支持什么的好主意:
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没有(因为JavaAFAIK中没有事件或属性)

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

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


  • 从2.0版开始,PostSharp提供了IDE工具,其中部分涵盖了Eclipse的“AJDT”功能。

    您是否有类似的AspectJ链接来记录支持的连接点?AspectJ在不断变化,文档也在滞后,因此您最好从Manning Publications获得这本书:。AspectJ具有足够的灵活性,因此很容易束缚自己。PostSharp 2.1文档链接: