什么是可能的AOP用例?

我想了解一下在应用程序devise中有效参与AOP的可能情况。 我到目前为止所见到的是:

  • 日志相关
  • 安全检查
  • 交易pipe理
  • 调整遗留的应用程序

还要别的吗?

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

( 相关问题 )

我可以给你两个例子:

  • 在JMX中自动注册对象以进行远程pipe理。 如果一个类使用我们的@AutoRegister注解进行注释,那么我们有一个观察该类的新实例的方面,并将它们自动注册到JMX中。

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

    • 谁是用户
    • 他们在调用什么方法
    • 他们提供了什么数据
    • 什么时候该方法被调用
    • 调用是否成功(即,如果抛出exception)

从适用性的angular度来看AOP的覆盖面,我真的推荐你阅读“ 面向方面的软件开发使用案例”一书 。 本书阐述了使用AOP的function和非function需求的用例。 之后,你会看到,方面可以用来比logging,追踪,安全等更多的要求。

AOP的一个有效的使用,除了你列出的所有,可以validation。 validation用户input或业务对象。

相关文章你必须看看。

  • AOP @ Work:使用切入点devise以避免图案密度
  • AOP @ Work:使用AspectJ增强devise模式,第2部分
  • 读/写锁 。 我使用一个方面来定义需要读取locking或独占locking的方法,而不是复制相同的片段。

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

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

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

  • exception处理:不需要重复try … catch,catch,catch等可怕列表 – 也意味着exception处理是保证一致的。
  • 性能监控:非常有用,因为使用方面是非侵入性的,可以在事实之后完成,然后在不再需要时closures。

我还将推荐以下方面:

  • asynchronous方法调用
  • 监控

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

INotifyPropertyChanged和类似的恐怖。

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

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

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

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

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