我们已经开始使用弹簧aop为交叉方面的应用(安全和缓存在的时刻).

我的经理的担忧性能的影响这项技术虽然他完全了解的益处。

我的问题你有没有遇到性问题,介绍了通过使用aop(专门弹簧aop)?

有帮助吗?

解决方案

只要您拥有AOP的控制,我认为它是有效的。无论如何我们确实遇到了性能问题,所以通过自己的推理我们并没有完全控制;)这主要是因为任何编写方面的人都完全了解所有其他系统中的各个方面以及它们如何相互关联。如果你开始做<!>“智能<!>”;你可以巧妙地超越自己的东西。在一个大型项目中做聪明的事情,很多人只看到系统的一小部分,这在性能上是非常危险的。这个建议也可能在没有AOP的情况下适用,但是AOP可以让你以一些真正优雅的方式射击自己。

Spring还使用代理进行范围操作,而那个是一个容易导致不良性能损失的区域。

但鉴于你有控制权,AOP唯一真正的痛点就是对调试的影响。

其他提示

如果性能成为一个问题,我们使用 AspectJ 效果很好。

因为它使用字节码编织(编译时与运行时完全不同),它是最快的AOP框架之一。请参阅: AOP基准

当我使用它时,我没有 - 但那时我的应用程序不是你的应用程序。

如果您将它用于非常紧凑的循环中使用的调用,那么商机可以显着提升性能。如果它只是用于检查每个请求的安全性并缓存各种内容,我看不出它可能是多么重要 - 但这就是为什么你应该对你的应用程序进行分析和基准测试。

我意识到<!>“;用你的应用程序测量<!>”;可能不是你想要的答案,但它可能是你猜到的那个:)

如果您使用的是基于代理的AOP,那么您正在讨论每个方面应用的另外一个Java方法调用。对那里的性能影响几乎可以忽略不计。唯一真正关心的是创建代理,但这通常只在应用程序启动时发生一次。 SpringSource博客上有一篇很棒的帖子:

http://blog.springsource.com / 2007/07/19 /戳穿-神话的代理 - 冲击性能/

在理论上如果使用AOP做到你能做什么硬的联接,没有性能的问题,没有任何开销,并没有额外的方法调除非你编织的什么都没有。AOP框架提供一种方法,以消除硬的联接和因式分解你的交叉关注。

在实践中,AOP框架可以介绍一下3种类型的开销:

  • 火时
  • 拦截的机械师
  • 消费者融入(的方式来发展的建议)

更多的细节可以参考 当-是-aop-码-执行.

只要小心如何实现一种意见,因为横向代码是一种诱惑,用拳/拆箱和反射(贵期的性能)。

没有一个AOP框架(难耦合你的交叉问题)可以开发你推定的建议(专门用于每一个治疗)更容易没有拳击/拆箱和反思。

你必须知道,大多数AOP框架不提供的方式,以避免完全拳/拆箱和反思。

我发明了的一个回应的大多数缺少需求的浓缩到3件事情:

  • 用户友好(重量轻,易于了解)
  • 透明(不断代码,包括)
  • 有效的(没有拳击/拆箱,没有反映在标称用户的代码和良好的拦截机械师)

你可以找到我开源项目在这里: Puresharp API。净4.5.2+ 先前 NConcern.净AOP框架

您是否考虑过在需要时在运行时向对象添加方面的AOP工具?有一个用于.net <!>“;使用Dynamic Decorator将对象添加到对象<!>”; (http://www.codeproject.com/KB/architecture/aspectddecorator.aspx)。我相信你可以为Java写一个类似的。

如果你正在使用某个方面的框架,那么可能存在一些性能问题。接下来如果你在一个框架之上创建抽象,并且方面处理是从框架完成的,那么很难找出与之相关的问题的原因。性能问题 。如果你真的关心性能和小时间片关注更多,我建议写自己的方面。没有人想要重新发明轮子,但有时候更好,它可能是最好的。你可以编写自己的AOP联盟抽象实现。

我在当前项目的批处理中使用了Spring AOP来进行事务管理数据库。

起初,人们认为不存在性能问题,但我们没有考虑到我们称之为数据库数千次的等式。 aop中的一个方面调用不会对性能产生太大影响,但会将其乘以数千,并且由于这些额外的方法调用,结果表明新系统比旧系统更差。

我会说aop是一个很棒的系统,但是请注意你的应用程序中添加了多少个方法调用

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top