2010-08-09 48 views
1

我的項目的副本包含HibernateGrailsPlugin.groovy下面的代碼片段:是否可以在我的grails應用程序上自定義hibernate-plugin自動生成的CRUD方法?

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類。 如果HibernatedPluginSupport的代碼駐留在我的項目的插件副本中,我似乎可以用其餘的grails特定代碼編譯HibernatePluginSupport類,我可以很容易地根據我的需要定製它。 我的問題是,如何修改特定類的自動生成方法?我看到的唯一方法是重寫groovy文件中的doWithDynamicMethods閉包,但我不想那樣做,因爲我只是爲某些域類定製它。更具體地說,我如何刪除/替換'HibernatePluginSupport.doWithDynamicMethods'閉包添加的動態方法?

+3

它是什麼,你想定製?也許諸如beforeInsert,beforeUpdate等攔截器方法是實現它的更好方法?我從來沒有聽說過修改save()delete(),find()等的人 – leebutts 2010-08-09 20:52:45

回答

0

首先:動態查找器是基於Groovy的meta-programming features

您不應該修改HibernateGrailsPlugin.groovy。該文件是Grails Hibernate插件的一部分,在執行某些Grails命令時將被覆蓋。

既然你可以自由地修改你的Groovy隨時對象元類從應用程序中你可以

一)創建自己的Grails插件,定製動態查找偷偷(與Hibernate的Grails的依賴插件)或

二)把你的元級修改爲BootStrap.groovy中的應用它們在應用程序啓動

相關問題