Grails не расширяет использование $ за пределами Groovy.Вот два практических применения $
Строковая интерполяция
Внутри GString вы можете использовать $ без {} для оценки пути к свойству, например,
def date = new Date()
println "The time is $date.time"
Если вы хотитечтобы оценить выражение, которое является более сложным, чем путь к свойству, вы должны использовать $ {}, например,
println "The time is ${new Date().getTime()}"
Динамическое выполнение кода
Динамический доступ к свойству
def prop = "time"
new Date()."$prop"
Динамический вызов метода
def prop = "toString"
new Date()."$prop"()
Как отмечено в комментариях, это действительно просто особый случай интерполяции строк, потому что следующее также верно
new Date().'toString'()