Используя мультиметоды, мы можем добавлять методы в существующие классы Java. Мой вопрос заключается в том, можно ли переопределить один конкретный метод и каким образом из кода Clojure. Например, если у вас есть следующий класс,
public class Shape {
public void draw() {
...
}
}
Я бы хотел иметь возможность запустить что-то для добавления метода before, например:
(attach-to-method Shape/draw :before
(println "... about to draw a shape"))
И после оценки этой формы все последующие вызовы для рисования начнут печатать строку перед выполнением самого вызова.
Моя цель с этим присоединением AOP-подобного поведения до / после / вокруг состоит в том, что инфраструктура, вызывающая этот метод в существующем экземпляре, может динамически изменяться и запускать вновь присоединенный код. В настоящее время я использую AspectJ для этого, но я дошел до того, что использование другого компилятора не вариант, и мне любопытно узнать, могу ли я просто отказаться от AspectJ.