2010-02-04 69 views
47

我想描述一下在应用程序设计中有效参与AOP的可能情况。所有我迄今遇到的是:可能的AOP用例有哪些?

  • 记录相关
  • 安全检查
  • 事务管理
  • 的调整遗留应用程序

还有什么呢?

(它不必是必然Spring基于代理的AOP - 相当的JBoss AOP)

Related question

+1

“可能的情况下”?这是一个近乎*无限的*集合。然而,并非所有人都是一个好主意。把一切都可能。有什么办法缩小或集中这个问题吗? – 2010-02-04 02:57:45

+1

阅读顺利:问题包含“在应用程序设计中有效启用AOP的可能案例”。我的意思是使用AOP是个好主意。对不起,如果问题不清楚。 – 2010-02-04 02:59:28

+0

应该是社区维基 – skaffman 2010-02-04 09:54:00

回答

25

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

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

  • 审计日志(黄金标准AOP使用情况)。它有点粗糙,但一般的方法是注释代表一些可审计行为的方法。与像Spring Security的结合,我们可以得到一个不错的主意:

    • 用户是谁
    • 他们调用什么方法
    • 他们提供什么样的数据
    • 什么时候方法被调用
    • 调用是否成功与否(即,如果引发了异常)
3

方法级别的缓存,如果你的方法是无状态的(我是指返回时用相同的参数值重复调用相同的值)。这对DAO方法更有效,因为它避免了数据库命中。

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

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

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

我也会推荐用于几个方面:

  • 异步方法调用
  • 监测

随着春的tcServer(开发者),你可以轻松地监视你所有的Spring Bean与 @Component注释。你可以看到使用的时间,输入和返回的数据,包括例外。

1

INotifyPropertyChanged和类似的恐惧。

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

3

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

我发表了一篇博客条目描述实际执行代码合同here

1

运行时检查。 Code Contracts for .NET使用AOP为

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

0

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

  • 将访问方法调用限制为只有几个类。
  • 自动注释选定的方法/类/字段。