Можно ли настроить автоматически сгенерированные методы CRUD hibernate-plugin в моем приложении grails? - PullRequest
1 голос
/ 09 августа 2010

Копия моего проекта содержит следующий фрагмент в HibernateGrailsPlugin.groovy:

def doWithDynamicMethods = {
        def dynamicMethods = HibernatePluginSupport.doWithDynamicMethods
        dynamicMethods.delegate = delegate
        dynamicMethods.call(it)

        // aids in generating appropriate documentation in plugin.xml since 
        // domain class methods are lazily loaded we initialize them here
        if(plugin.basePlugin) {
            try {
                def clz = application.classLoader.loadClass("org.grails.Behavior")
                clz.count()             
            }
            catch(e) {
                // ignore
            }
        }
    }

Я новичок в grails / groovy, но если я правильно понимаю, это закрытие делегирует добавление / удаление динамических методовзакрытию doWithDynamicMethods класса HibernatePluginSupport.Похоже, что класс HibernatePluginSupport скомпилирован с остальным кодом, специфичным для Grails, если код для HibernatedPluginSupport находился в копии плагина моего проекта, я мог бы легко настроить его под свои нужды.У меня вопрос, как мне изменить автоматически сгенерированные методы для определенных классов?Единственный способ, которым я вижу, - переписать замыкание doWithDynamicMethods в файле groovy, но я не хочу этого делать, поскольку настраиваю его только для некоторых классов домена.В частности, как мне удалить / заменить динамические методы, добавленные закрытием HibernatePluginSupport.doWithDynamicMethods?

1 Ответ

0 голосов
/ 14 апреля 2011

Прежде всего: динамические искатели основаны на функциях метапрограммирования Groovy .

Вы не должны изменять HibernateGrailsPlugin.groovy.Этот файл является частью плагина Grails Hibernate и будет переопределен при выполнении некоторых команд Grails.

Поскольку вы можете в любое время изменять мета-классы объектов Groovy из своего приложения, вы можете

a) создайте свой собственный плагин Grails, который пробирается в пользовательские динамические искатели (с зависимостью от плагина Hibernate Grails) или

b) бросают ваши модификации мета-класса в Bootstrap.groovy, чтобы применить их при запуске приложения

...