Scala: AOP before/after advice simulieren?

Wenn ich in Java ein Interface und eine Implementierung habe…

public interface Foo {
    public void bar();
}

public class FooImpl implements Foo {
    public void bar(){ /* tu was*/ } 
}

… kann ich z.B. mit Spring AOP eine “before advice” dranklöppeln, die bei jedem Aufruf von bar vorher etwas ausführt. Die Klasse FooImpl bekommt davon nichts mit, und die API ändert sich nicht.

Kann man das in Scala irgendwie simulieren?

Natürlich geht sowas:

trait Foo {
    def bar();
}

trait FooAdvice extends Foo {
   def bar() { 
       /* do advice stuff */  
       barNew()
   }
   def barNew()
}

class FooImpl extends FooAdvice {
    def barNew(){ /* tu was*/ } 
}

Aber das ändert natürlich aus FooImpls Sicht die API, und das stört mich…

Und schon erledigt: Der Trick ist, FooAdvice als Trait zu FooImpl “dazuzumixen”

Details: http://jonasboner.com/2008/02/06/aop-style-mixin-composition-stacks-in-scala/