Unterschied zwischen @Delegate, @Mixin und Traits in Groovy?

Würde mir jemand erklären wann ich das nutzen möchteGroovige Eigenschaften Mixins (@Mixin) vs. Delegates (@Delegate)? Vielleicht würden ein paar Kompromisse und Designprobleme helfen.

Sie scheinen alle die Wiederverwendung mehrerer "Verhaltensklassen" zu ermöglichen. Vielen Dank. :-)

Dieser SO-Thread war auch hilfreich:Unterschied zwischen @Delegate- und @Mixin-AST-Transformationen in Groovy