可能的AOP用例有哪些?

时间:2010-02-04 02:55:01

标签: java spring jboss aop use-case

我想了解AOP在应用程序设计中有效参与的可能情况。到目前为止,我所遇到的只有:

  • 记录相关
  • 安全检查
  • 交易管理
  • 调整遗留应用程序

还有别的吗?

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

Related question

11 个答案:

答案 0 :(得分:27)

我可以举两个使用它的例子:

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

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

    • 用户
    • 他们正在调用什么方法
    • 他们提供的数据
    • 调用该方法的时间
    • 调用是否成功(即,是否抛出异常)

答案 1 :(得分:7)

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

答案 2 :(得分:4)

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

您必须查看的相关文章。

答案 3 :(得分:4)

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

答案 4 :(得分:4)

  • 读/写锁。我使用了一个方面来定义需要读锁定或独占锁定的方法,而不是复制相同的代码片段。

答案 5 :(得分:3)

  • 异常处理:不需要重复尝试的可怕列表... catch,catch,catch等 - 也意味着异常处理保证一致。
  • 性能监控:非常有用,因为使用方面是非侵入性的,可以在事后完成,然后在不再需要时关闭。

答案 6 :(得分:3)

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

我发布了一篇描述实际实施的博客文章here

答案 7 :(得分:1)

我还会推荐以下方面:

  • 异步方法调用
  • 监控

使用Spring和tcServer(开发人员),您可以轻松地监视所有的Spring bean @Component注释。您可以看到使用的时间,输入和返回数据,包括例外。

答案 8 :(得分:1)

INotifyPropertyChanged和类似的恐怖。

基本上只要有代码看起来像这样 - 使用方面就可以了。

答案 9 :(得分:1)

代码合同的运行时检查。 Code Contracts for .NET使用AOP

  

运行时检查。我们的二进制重写器通过注入合同来修改程序,这些合同在程序执行过程中被检查。

答案 10 :(得分:0)

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

  • 将对方法调用的访问限制为只有少数类。
  • 自动注释所选方法/类/字段。