【问题标题】:What is the most common use for AOP in spring projectspring项目中AOP最常见的用途是什么
【发布时间】:2018-12-23 13:43:24
【问题描述】:

在回顾了 AOP 模式之后,我对在我的 spring 项目中使用它的方式和用途感到不知所措。

我想用它作为所有金融业务逻辑的审计日志系统。它似乎很容易集成。但我想听听您对此的看法。

问题是 - 我应该考虑哪些其他用途对于这种模式很常见?只要有好处,我不介意重构我当前的逻辑以与 AOP 一起使用。

【问题讨论】:

标签: java spring aop


【解决方案1】:

最常见的用法是您的应用程序具有横切关注点,即将要在多个类/层中编写的一段逻辑或代码。

这可能会根据您的需要而有所不同。一些非常常见的例子可能是:

  1. 事务管理
  2. 日志记录
  3. 异常处理(尤其是当您可能想要详细跟踪或有一些从异常中恢复的计划时)
  4. 安全方面
  5. 仪表

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    除了 Axel 提到的日志记录/审计和声明性事务处理之外,我想说 AOP 的另一种用法是作为请求拦截器。例如,假设您需要拦截来自服务器的所有请求,以便您可以使用它做一些事情(可能是跟踪哪个应用程序正在向其他应用程序或哪个数据库发送什么请求等)。

    【讨论】:

    • 这也可以使用 HandlerInterceptor 和 HandlerInterceptorAdoptor
    【解决方案3】:

    最常见的用途可能是使用@Transactional 的声明式事务处理。

    【讨论】:

    • 你能解释一下吗?为什么?
    【解决方案4】:

    使用 AOP 进行审计日志记录是对 AOP 的完全有效的使用。您可以将其关闭以进行测试,并根据生产中的需求变化进行更改。

    在这种情况下,唯一的缺点是如果您计划通过 SQL 执行审计日志。直接在数据库中将这种审计作为触发器实现可能会更高效。

    【讨论】:

      【解决方案5】:

      您可以出于安全考虑使用 AOP,例如允许/禁止方法访问。 aop 的另一个用途是测试您的应用程序性能。

      【讨论】:

      • 对于执行允许/禁止方法访问,我认为 Spring Security 是比 AOP 更好的选择。
      【解决方案6】:

      它可用于使用 dropwizard、prometheus 等客户端库公开自定义指标(服务仪表化),用于警报和监控服务。

      它帮助了我们,

      1. 将此检测代码(不是业务逻辑)保留在实际业务逻辑之外
      2. 将这些跨领域关注点放在一个地方。

      3. 在需要的地方以声明方式应用它们。

      例如, 揭露

      1. REST AIP 返回的总字节数 - (可以在建议后完成)
      2. REST API 花费的总时间,即服务器输入和服务器输出时间 -(可以使用环绕建议来完成)。

      【讨论】:

        【解决方案7】:

        作为与@Axel 所说的略有不同的答案,使用它来自动拦截所有数据访问调用并适当地应用事务是惊人的。我已经设置好在事务中实现对我的 dao 包的所有调用,这些调用不以“get”开头,然后在以“get”开头的方法中执行的任何操作都被视为只读。这太棒了,因为除了初始设置之外,我不必担心,只需遵循命名约定即可。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-12
          • 1970-01-01
          • 1970-01-01
          • 2011-09-15
          • 1970-01-01
          相关资源
          最近更新 更多