【问题标题】:Can I do Aspect Oriented Programming in Scala?我可以在 Scala 中进行面向方面的编程吗?
【发布时间】:2020-12-21 17:20:30
【问题描述】:

我不是在谈论模仿 Scala 中的 AOP 功能(即使用 Traits 而不是 Aspects),我想知道是否可以在 Scala 中执行真正的 AOP(即建议、方面、关节点、编织等.. .)

【问题讨论】:

  • AOP 的主要问题及其复杂性的来源不是建议、连接点和编织吗?而 trait 可以让您以更简单、更可预测的方式实现类似的效果,而不会出现仅在运行时出现的东西?
  • Macwire DI 框架具有拦截器支持github.com/adamw/macwire#interceptors,类似于基于注解的 AOP。

标签: scala aop


【解决方案1】:

Mixin 是在 Scala 中引入 AOP 的经典方式(如 Jonas Bonér 的“AOP-style Mixin Composition Stacks in Scala”)。

但我只知道“Method Proxy-Based AOP in Scala”(Daniel Spiewak -- also here on SO -- 和 Tian Zhao)作为 Scala 中的高级 AOP 实现 (source code here)。

我们的技术使用 Scala 的高阶函数来拦截方法调用,而对基础程序施加的语法开销最小。
该框架允许开发人员通过指定类类型和方法签名来定义切入点。该框架还允许访问上下文变量,而方面可以在建议正文之前或之后插入建议代码。

【讨论】:

    【解决方案2】:

    我们在 Scala 类中使用 Spring AOP 没有任何问题。它没有进行任何字节码修改(仅代理)。

    【讨论】:

      猜你喜欢
      • 2010-11-26
      • 1970-01-01
      • 2017-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-24
      • 1970-01-01
      • 2010-09-18
      相关资源
      最近更新 更多