clojure - Clojure 中的面向方面编程

标签 clojure jvm aop

如何在Clojure中实现面向方面的编程? Clojure 中需要 AOP 吗?
假设我们想要普通的 Clojure 解决方案(没有 AspectJ)。

最佳答案

面向方面的编程通常用于向代码添加横切功能,否则这些代码将与业务逻辑无可救药地交织在一起。一个很好的例子是日志记录 - 您真的不希望日志记录代码分散在代码库中的各处。

在 Clojure 中您并不真正需要 AOP,因为使用 Clojure 中的其他技术很容易实现这一点。

例如,您可以使用高阶函数来“包装”具有横切功能的其他函数:

; a simple function - the "business logic"
(defn my-calculation [a b]
  (+ a b))

; higher order function that adds logging to any other function
(defn wrap-with-logging [func]
  (fn [& args]
    (let [result (apply func args)]
      (println "Log result: " result)
      result)))

; create a wrapped version of the original function with logging added
(def my-logged-calculation (wrap-with-logging my-calculation))

(my-logged-calculation 7 9)
=> Log result:  16
=> 16

关于clojure - Clojure 中的面向方面编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5573418/

相关文章:

java - 调用动态生成名称的类的方法

haskell - 嵌套序列到分支/树数据结构

java - JVM实际上是如何读取并运行字节码的?一个巨大的 switch-case 语句?

Ninject 公约和拦截

clojure - 在 clojure 中将大型数据结构作为 EDN 写入磁盘

performance - 了解 Clojure 转换器性能

java - 为什么 -Xmn1m -XX :SurvivorRatio=2 makes eden space 0k

java - 安装 JDK8 后,将 Windows 7 上的命令提示符设置为 JDK7

c# - C# (.Net) 的面向方面编程 (AOP) 解决方案及其功能

java - 根据自定义条件保护对 Java 方法的访问