A questão aqui é que seu conceito é completamente falho. Você está atribuindo um mapa à classe e não à instância com esta linha:
User.metaClass.dynamicAttributes = [:]
Para realizar o que você está procurando, você precisa fazer o seguinte:
User.metaClass.propertyMissing = { String name ->
if (!delegate.dynamicAttributes) delegate.dynamicAttributes = [:]
delegate.dynamicAttributes[name]
}
User.metaClass.propertyMissing = { String name, value ->
if (!delegate.dynamicAttributes) delegate.dynamicAttributes = [:]
delegate.dynamicAttributes[name] = value
}
Tenho certeza de que há uma maneira mais limpa de fazer isso, mas o exemplo acima demonstra uma solução em que o mapa é instanciado por instância e não em todas as instâncias.