1

我的项目副本在 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 的新手,但如果我理解正确,这个闭包将动态方法的添加/删除委托给 HibernatePluginSupport 类的 doWithDynamicMethods 闭包。似乎 HibernatePluginSupport 类是用其余的 grails 特定代码编译的,如果 HibernatePluginSupport 的代码存在于我项目的插件副本中,我可以轻松地根据我的需要对其进行自定义。我的问题是,如何修改特定类的自动生成方法?我看到的唯一方法是重写 groovy 文件中的 doWithDynamicMethods 闭包,但我不想这样做,因为我只是为某些域类定制它。更具体地说,如何删除/替换由“HibernatePluginSupport.doWithDynamicMethods”闭包添加的动态方法?

4

1 回答 1

0

首先:动态查找器基于 Groovy 的元编程特性

您不应该修改 HibernateGrailsPlugin.groovy。该文件是 Grails Hibernate 插件的一部分,在执行某些 Grails 命令时将被覆盖。

由于您可以随时在应用程序中自由修改 Groovy 对象元类,因此您可以

a) 创建您自己的 grails 插件,该插件潜入自定义动态查找器(依赖于 Hibernate Grails 插件)或

b) 将您的元类修改放入 Bootstrap.groovy 以在应用程序启动时应用它们

于 2011-04-14T11:30:36.990 回答