【问题标题】:What are the possible AOP use cases?有哪些可能的 AOP 用例?
【发布时间】:2011-01-12 21:56:08
【问题描述】:

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

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

还有什么?

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

(Related question)

【问题讨论】:

  • “可能的情况”?那是一个几乎无限的集合。然而,并非所有都是一个好主意。放一切皆有可能。有什么方法可以缩小或聚焦这个问题?
  • 读得好:问题包含“在应用程序设计中有效引入 AOP 的可能案例”。我的意思是使用 AOP 是个好主意的情况。抱歉,如果问题不清楚。
  • 应该是社区维基
  • “Effective Involvement”似乎是在邀请您简单地列出可以使用 AOP 的所有可能方式。 “有效”这个词很含糊,如果没有某种限定或过滤,最愚蠢的 AOP 技术可能会被 AOP 爱好者称为“有效”。

标签: java spring jboss aop use-case


【解决方案1】:

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

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

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

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

【讨论】:

  • 业务代码可以使用aop吗?假设我有一个演示者,您可以为其设置视图或不设置视图(mvp)。那么我不想继续检查每次调用 view 的 view 是否为 null 我可以在调用 view 方法之前处理这个 null 检查吗?
  • @Kevin:在这种情况下,您如何处理审计失败?如果抛出任何异常,甚至是除零、空指针异常等微不足道的异常,您是否将审计标记为失败?
【解决方案2】:

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

你必须看的相关文章。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:
      • 读/写锁。我没有复制相同的 sn-p,而是使用一个方面来定义需要读锁或排他锁的方法。

      【讨论】:

        【解决方案5】:

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

        【讨论】:

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

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

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

          【讨论】:

            【解决方案7】:

            我还将推荐以下方面:

            • 异步方法调用
            • 监控

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

            【讨论】:

              【解决方案8】:

              INotifyPropertyChanged 和类似的恐怖事件。

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

              【讨论】:

                【解决方案9】:

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

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

                【讨论】:

                  【解决方案10】:

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

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

                  【讨论】:

                    【解决方案11】:

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

                    • 将对方法调用的访问仅限于少数类。
                    • 自动注释选定的方法/类/字段。

                    【讨论】:

                    • 如何自动注释方法?我们需要在编译时应用注解对吗?
                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2016-07-17
                    • 2015-10-23
                    • 1970-01-01
                    • 2011-08-31
                    • 1970-01-01
                    • 1970-01-01
                    • 2014-03-17
                    相关资源
                    最近更新 更多