Проблемът тук е, че вашата концепция е напълно погрешна. Вие присвоявате карта на класа, а не на екземпляра с този ред:
User.metaClass.dynamicAttributes = [:]
За да постигнете това, което търсите, трябва да направите следното:
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
}
Сигурен съм, че има по-чист начин да направите това, но горното демонстрира решение, при което картата се инстанцира за всеки екземпляр, а не във всички екземпляри.