春季 AOP vs AspectJ

我的印象是,Spring AOP最适合用于特定于应用程序的任务,例如安全性,日志记录,事务等,因为它使用自定义Java5注释作为框架。然而,AspectJ似乎在设计模式方面更友好。

任何人都可以强调在Spring应用程序中使用Spring AOP与AspectJ的各种优缺点吗?


答案 1

弹簧AOP优点

  • 它比AspectJ更简单,因为您不必使用LTW(加载时编织)或AspectJ编译器。

  • 它使用代理模式和装饰器模式

弹簧AOP缺点

  • 这是基于代理的 AOP,因此基本上只能使用方法执行连接点。
  • 在同一类中调用另一个方法时,不会应用方面。
  • 可能会有一点运行时开销。
  • Spring-AOP不能为任何不是由Spring工厂创建的方面添加一个方面

AspectJ Pros

  • 这支持所有连接点。这意味着您可以做任何事情。
  • 运行时开销比 Spring AOP 少。

AspectJ 缺点

  • 小心。检查您的方面是否仅编织成您想要编织的内容。
  • 您需要使用AspectJ编译器进行额外的构建过程,或者必须设置LTW(加载时间编织)

答案 2

另一个注意事项:如果高负载下的性能很重要,您将需要AspectJ,它比Spring AOP快9-35倍。10ns与355ns可能听起来不多,但我见过人们使用很多方面。10K值得的方面。在这些情况下,您的请求可能会涉及数千个方面。在这种情况下,您将向该请求添加 ms。

请参阅基准测试


推荐