Вы можете сделать это, используя метапрограммирование. Код, который добавляет свойство, должен запускаться либо при закрытии doWithDynamicMethods
плагина, либо из Bootstrap.groovy
. При использовании подхода с плагином что-то вроде этого должно работать:
def doWithDynamicMethods = {ctx ->
application.domainClasses
.findAll {it.simpleName.startsWith('S')}.metaClass.each {domainMetaClass ->
Integer fooVal = 0
domainMetaClass.getFoo = {-> fooVal}
domainMetaClass.setFoo = {Integer newFooVal -> fooVal = newFooVal}
}
}
Приведенный выше код должен добавить свойство Integer foo
к каждому классу домена, имя которого начинается с 'S'. Я не тестировал этот код, поэтому он, вероятно, не работает. Чтобы увидеть пример, в котором вы можете быть более уверенным:
- Найдите плагин, который добавляет, который изменяет классы домена (например, добавляет поле или метод)
- Скачать
- Посмотрите на код в дескрипторе плагина
doWithDynamicMethods
closure
- Копирование, вставка и адаптация к вашим потребностям