我想描绘一下 AOP 有效参与应用程序设计的可能案例。到目前为止,我遇到的只是:
- 日志相关
- 安全检查
- 事务管理
- 调整遗留应用程序
还要别的吗?
(它不一定是 Spring 的基于代理的 AOP - 而是 JBoss AOP。)
(相关问题)
我可以给你两个我们使用它的例子:
自动在 JMX 中注册对象以进行远程管理。如果一个类使用我们的注解进行@AutoRegister
注解,我们就有一个切面来监视该类的新实例并自动在 JMX 中注册它们。
审计日志(黄金标准 AOP 用例)。它有点粗糙,但一般的方法是注释代表一些可审计操作的方法。结合 Spring Security 之类的东西,我们可以很好地了解:
哇... 10 年前 - AOP 并没有太多...这里还有一些
要查看 AOP 在适用性方面的覆盖范围,我真的建议您阅读Aspect-Oriented-Software-Development-Use-Cases 一书。本书详细阐述了使用 AOP 的功能性和非功能性需求的用例。之后,您将看到方面可以用于比日志记录、跟踪、安全等更多的需求。
方法级缓存,如果您的方法是无状态的(我的意思是在使用相同的参数值重复调用时返回相同的值)。这在 DAO 方法的情况下更有效,因为它避免了数据库命中。
我们将其用于软件许可证管理,即仅当计算机安装了某些特定许可证时才允许软件运行。它与您列出的用途没有什么不同,因为它是一种安全检查形式。
我在这里发表了一篇描述实际实现的博客文章
除了您列出的所有内容之外,AOP 的一种有效用途是验证。验证用户输入或业务对象。
你必须看的相关文章。
我还将推荐以下方面:
使用 Spring 和 tcServer(开发人员),您可以使用 @Component 注释轻松监控所有 Spring bean。您可以查看使用时间、输入和返回数据,包括异常。
INotifyPropertyChanged 和类似的恐怖。
基本上只要有这样的代码 - 使用一个方面,你就完成了。
代码合约的运行时检查。.NET 的代码契约使用 AOP
运行时检查。我们的二进制重写器通过注入合约来修改程序,合约作为程序执行的一部分进行检查。
我们使用 AspectJ 来完成 AOP。除上述以外的用例如下: