В соответствии с documentation контроллер Grails - это просто класс с «Контроллером», добавленным к имени и сохраненным в grails-app/controllers/
. Простейшие такого класса существ:Откуда берутся методы «expando» контроллера Grails?
package some.package
class FooController {
def index = {}
}
Когда приложение Grails запущенно, этот контроллер будет наследовать некоторые стандартные методы, такие как getParams
и getSession
. На прилагаемом скриншоте я вижу, что они добавлены через groovy.lang.ExpandoMetaClass
. Я не вижу, как это происходит. Контроллер не реализует никаких интерфейсов или не расширяет любые абстракции. Откуда берутся эти методы?
Добавление методов и свойств может быть выполнено через Groovy runtime и метапрограммирование времени компиляции. Grails использует эту тактику, чтобы совершить «волшебство». Он изменяет все контроллеры по соглашению. Вы спрашиваете, где именно работает этот код? –
Это как просить, откуда происходят радуги. Они просто такие потрясающие, кого это волнует! – Gregg
@JamesKleeh, если это единственный ответ, да. Мне не нравится не знать, где искать ответ, когда у меня возникает вопрос о чем-то. В этом случае, где я буду смотреть, чтобы узнать обо всех «унаследованных» методах, доступных контроллеру, и что они делают? На данный момент я должен установить точку останова, выровнять график и затем угадать. –