Я не говорю о том, чтобы имитировать функции AOP в Scala (т.е. используя Traits вместо Apects), мне интересно, возможно ли сделать истинную AOP в Scala (т.е. советы, аспекты, совлокальные точки, плетение и т.д.)
Могу ли я выполнять ориентированное на аспектное программирование в Scala?
Ответ 1
Mixin был классическим способом введения AOP в Scala (как в AOP-Style Mixin Composition Stacks в Scala "от Джонаса Бонера".
Но я знаю только " Метод AOP на основе прокси-сервера в Scala" (Daniel Spiewak - также здесь, на SO - и Tian Zhao) в качестве расширенной реализации AOP в Scala ( исходный код здесь).
В нашей технике используются функции более высокого порядка Scala для перехвата вызовов методов с минимальными синтаксическими накладными расходами, наложенными на базовую программу.
Эта структура позволяет разработчикам определять pointcuts, задавая типы классов и сигнатуры методов. Структура также позволяет получить доступ к контекстным переменным, в то время как аспекты могут вставлять код совета до или после консультативного органа.
Ответ 2
У нас не было проблем с использованием Spring АОП с нашими классами Scala. Он не делает никаких модификаций байткода (только проксирование).