60

我想描绘一下 AOP 有效参与应用程序设计的可能案例。到目前为止,我遇到的只是:

  • 日志相关
  • 安全检查
  • 事务管理
  • 调整遗留应用程序

还要别的吗?

(它不一定是 Spring 的基于代理的 AOP - 而是 JBoss AOP。)

相关问题

4

11 回答 11

33

我可以给你两个我们使用它的例子:

  • 自动在 JMX 中注册对象以进行远程管理。如果一个类使用我们的注解进行@AutoRegister注解,我们就有一个切面来监视该类的新实例并自动在 JMX 中注册它们。

  • 审计日志(黄金标准 AOP 用例)。它有点粗糙,但一般的方法是注释代表一些可审计操作的方法。结合 Spring Security 之类的东西,我们可以很好地了解:

    • 用户是谁
    • 他们正在调用什么方法
    • 他们提供什么数据
    • 什么时候调用该方法
    • 调用是否成功(即是否抛出异常)
于 2010-02-04T03:25:30.897 回答
11
  • 异常处理:不需要重复可怕的try ... catch、catch、catch等列表——也意味着异常处理保证是一致的。
  • 性能监控:非常有用,因为使用方面是非侵入性的,可以在事后完成,然后在不再需要时关闭。

哇... 10 年前 - AOP 并没有太多...这里还有一些

  • 能够自定义您无权访问其构造函数的对象(例如 jpa 实体)
  • 实施安全规则(安全性表示不允许用户调用此方法 - AOP 可以实现)
  • 事务管理器(开始、提交、回滚)
  • 缓存 - 想要缓存方法的结果而不是再次调用它
于 2010-02-05T06:42:15.817 回答
7

要查看 AOP 在适用性方面的覆盖范围,我真的建议您阅读Aspect-Oriented-Software-Development-Use-Cases 一书。本书详细阐述了使用 AOP 的功能性和非功能性需求的用例。之后,您将看到方面可以用于比日志记录、跟踪、安全等更多的需求。

于 2010-02-04T10:11:39.950 回答
6

方法级缓存,如果您的方法是无状态的(我的意思是在使用相同的参数值重复调用时返回相同的值)。这在 DAO 方法的情况下更有效,因为它避免了数据库命中。

于 2010-02-04T06:37:38.163 回答
5

我们将其用于软件许可证管理,即仅当计算机安装了某些特定许可证时才允许软件运行。它与您列出的用途没有什么不同,因为它是一种安全检查形式。

我在这里发表了一篇描述实际实现的博客文章

于 2010-11-21T00:12:20.987 回答
4

除了您列出的所有内容之外,AOP 的一种有效用途是验证。验证用户输入或业务对象。

你必须看的相关文章。

于 2010-02-04T04:05:33.587 回答
4
  • 读/写锁。我没有复制相同的代码片段,而是使用一个方面来定义需要读锁或排他锁的方法。
于 2010-02-04T08:43:16.537 回答
1

我还将推荐以下方面:

  • 异步方法调用
  • 监控

使用 Spring 和 tcServer(开发人员),您可以使用 @Component 注释轻松监控所有 Spring bean。您可以查看使用时间、输入和返回数据,包括异常。

于 2010-02-10T15:06:29.843 回答
1

INotifyPropertyChanged 和类似的恐怖。

基本上只要有这样的代码 - 使用一个方面,你就完成了。

于 2010-07-16T15:17:43.150 回答
1

代码合约的运行时检查。.NET 的代码契约使用 AOP

运行时检查。我们的二进制重写器通过注入合约来修改程序,合约作为程序执行的一部分进行检查。

于 2015-10-02T15:24:44.783 回答
1

我们使用 AspectJ 来完成 AOP。除上述以外的用例如下:

  • 将对方法调用的访问限制为仅少数类。
  • 自动注释选定的方法/类/字段。
于 2016-01-04T04:57:07.877 回答