2010-08-09 4 views
1

моего проекта содержит следующий фрагмент кода в HibernateGrailsPlugin.groovy:Можно ли настроить гибридные методы CRUD спящего режима для моего приложения grails? копия

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 
      } 
     } 
    } 

Я новичок в Грааль/заводные, но если я правильно понимаю, это замыкание делегирования надстройки/удаления динамических методов к doWithDynamicMethods закрытие класса HibernatePluginSupport. Кажется, класс HibernatePluginSupport скомпилирован с остальным кодом grails, если код для HibernatedPluginSupport жил в копии моего проекта плагина, я мог бы легко настроить его в соответствии с моими потребностями. Мой вопрос в том, как мне изменить автогенерируемые методы для определенных классов? Единственный способ, по которому я вижу, это переписать закрытие doWithDynamicMethods в файле groovy, но я не хочу этого делать, поскольку я настраиваю его только для некоторых классов домена. Более конкретно: Как удалить/заменить динамические методы, добавленные закрытием «HibernatePluginSupport.doWithDynamicMethods»?

+3

что это такое, что вы пытаетесь настроить? Возможно, методы перехватчика, такие как beforeInsert, beforeUpdate и т. Д., Являются лучшим способом его достижения? Я никогда не слышал о том, как люди меняют save() delete(), find() и т. Д. – leebutts

ответ

0

Прежде всего: динамические искатели основаны на 0 meta-programming features от Groovy.

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

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

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

б) бросить свои изменения мета-класса в Bootstrap.groovy применять их при запуске приложения