1
36
只要你 控制 关于你的AOP,我认为它很有效。无论如何,我们确实存在性能问题,因此根据自己的推理,我们无法完全控制;)这主要是因为编写方面的任何人都必须 满的 了解所有 系统中的方面及其相互关系。如果你开始做“聪明”的事情,你可以在一瞬间超越自己。在一个大型项目中,如果有很多人只看到系统的一小部分,那么在性能方面做一些聪明的事情可能会非常危险。这个建议可能在没有AOP的情况下也适用,但是AOP可以让你用一些真正优雅的方式射自己的脚。 Spring还将代理用于范围管理和 那是 这是一个容易出现意外性能损失的领域。 但考虑到您拥有控制权,AOP唯一真正的痛点是对调试的影响。 |
2
28
如果性能将成为一个问题,我们已经使用 AspectJ 因为它使用字节码编织(编译时和运行时有很大区别),所以它是最快的AOP框架之一。见: AOP Benchmarks |
3
21
如果您将它用于在非常紧密的循环中使用的调用,那么 对于一个重要的性能打击。如果它只是用于每个请求检查一次安全性并缓存各种内容,我看不出它有多重要——但这就是为什么您应该对其进行评测和基准测试 应用程序。 我意识到“用你的应用程序测量”可能不是你想要的答案,但很可能是你猜得到的答案:) |
4
7
如果您使用的是基于代理的AOP,那么您所说的是每应用一个方面额外调用一个Java方法。对性能的影响可以忽略不计。唯一真正关心的是代理的创建,但这通常只在应用程序启动时发生一次。SpringSource博客上有一篇很好的帖子: http://blog.springsource.com/2007/07/19/debunking-myths-proxies-impact-performance/ |
5
1
从理论上讲,如果您使用AOP实现硬耦合所能实现的功能,那么就不会有性能问题,不会有开销,也不会有额外的方法调用,除非您是免费编织的。AOP框架为您提供了一种消除硬耦合和分解横切关注点的方法。 实际上,AOP框架可以引入3种类型的开销:
有关更多详细信息,请参阅 when-is-aop-code-executed 只是要小心如何实现建议,因为横向代码是装箱/拆箱和反射的诱惑(性能方面代价高昂)。 如果没有AOP框架(硬耦合您的交叉关注点),您可以更轻松地开发假定的建议(专门用于每种治疗),而无需装箱/拆箱和反思。 您必须知道,大多数AOP框架都没有提供完全避免装箱/拆箱和反射的方法。 我开发了一个用于响应大多数缺失需求的解决方案,主要集中在三个方面:
您可以在此处找到我的开源项目: Puresharp API .net 4.5.2+ 先前 NConcern .NET AOP Framework |
6
0
您有没有想过使用AOP工具在需要时在运行时向对象添加方面?有一个是针对.net的“使用动态装饰器向对象添加方面”(http://www.codeproject.com/KB/architecture/aspectddecorator.aspx). 我相信您可以为Java编写一个类似的。 |
7
0
如果您使用某个单一框架来处理方面,可能会出现一些性能问题。接下来,如果您在某个单一框架之上创建抽象,并且方面处理是从框架中完成的,那么很难找出与性能问题相关的问题的原因。如果你真的更关心性能和小时间片,我建议写自己的方面。没有人想重新发明轮子,但有时更好,它可能是最好的。你可以写自己的AOP联盟抽象实现。 |
8
0
我在当前项目的批处理过程中使用了SpringAOP来管理数据库事务。 起初,我们认为不会有性能问题,但我们没有考虑到我们数千次调用数据库的等式。aop中的一个方面调用对性能影响不大,但将其乘以数千,结果表明,由于这些额外的方法调用,新系统比旧系统更差。 我想说aop是一个很好使用的系统,但是请注意有多少方法调用被添加到您的应用程序中 |
9
0
11年后的问题,看看这是多么恶化的情况。 示例:绝大多数人认为,将一个简单的@Transactional spring java注释放到某个方法中,并让spring在调用方和被调用方代理组件之间架起桥梁是正常的。现在他们有20多帧不可调试的“魔法”代码。JIT编译器很快被超越,无法再尝试内联,或者最终导致大量生成的类导致内存膨胀。 在这个“框架用户”时代,懒散是没有限制的。难怪普通http调用的e2e时间从100毫秒增加到10秒。难怪您需要2GB来运行一个糟糕的servlet容器,而这个容器过去的运行速度是128MB。不要让我开始讨论记录异常堆栈跟踪的成本。。。 |
Walter · 如何配置aspectj忽略getter和setter 6 年前 |
MikaelW · AOP,如何仅在直接从包X发出时拦截对给定类的调用 7 年前 |
Serhii · 如何从父方法获取注释? 7 年前 |
Filip · .使用自定义属性的NET Unity拦截 7 年前 |