我的项目副本在 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 的新手,但如果我理解正确,这个闭包将动态方法的添加/删除委托(delegate)给 HibernatePluginSupport 类的 doWithDynamicMethods 闭包。
似乎 HibernatePluginSupport 类是用其余的 grails 特定代码编译的,如果 HibernatePluginSupport 的代码存在于我项目的插件副本中,我可以轻松地根据我的需要对其进行自定义。
我的问题是,如何修改特定类的自动生成方法?我看到的唯一方法是重写 groovy 文件中的 doWithDynamicMethods 闭包,但我不想这样做,因为我只是为某些域类定制它。更具体地说,如何删除/替换由“HibernatePluginSupport.doWithDynamicMethods”闭包添加的动态方法?
最佳答案
首先:动态查找器基于 Groovy 的 meta-programming features .
您不应该修改 HibernateGrailsPlugin.groovy。该文件是 Grails Hibernate 插件的一部分,在执行某些 Grails 命令时将被覆盖。
由于您可以随时在应用程序中自由修改 Groovy 对象元类,因此您可以
a) 创建您自己的 grails 插件,该插件潜入自定义动态查找器(依赖于 Hibernate Grails 插件)或
b) 将您的元类修改放入 Bootstrap.groovy 以在应用程序启动时应用它们
关于hibernate - 是否可以在我的 grails 应用程序上自定义 hibernate-plugin 自动生成的 CRUD 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3443468/