Grails 和 Groovy 元类包名称约定

Posted

技术标签:

【中文标题】Grails 和 Groovy 元类包名称约定【英文标题】:Grails and Groovy metaclass package name convention 【发布时间】:2012-07-29 10:11:16 【问题描述】:

我希望能够根据using the delegating meta class 此处定义的约定将我的元类放在包 groovy.runtime.metaclass 中。我已将MyClassMetaClass 放在groovy.runtime.metaclass.mypackage. 中,用于具体类mypackage.MyClass。不幸的是,MyClass 的调用没有被MyClassMetaClass 拦截。也许这与 grails 的初始化方式有关..?

【问题讨论】:

看起来一切正常。发布一些代码,以便我们获得更多信息。我现在能想到的一件事是,如果你扩展了 DelegatingMetaClass。 @TiagoFarias 我可以让 MetaClass 在使用普通的 groovy 项目时工作,但不能使用 grails 项目。 【参考方案1】:

可以通过更改 BootStrap.groovy 在 grails 项目中使用委托元类。

import org.codehaus.groovy.runtime.InvokerHelper
class BootStrap 

    def init =  servletContext ->
        def myMetaClass = new MyClassMetaClass(MyClass.class)
        InvokerHelper.metaRegistry.setMetaClass(MyClass.class, myMetaClass)
    
    def destroy = 
    

当然,这与实现问题中提到的委托元类不同。

【讨论】:

以上是关于Grails 和 Groovy 元类包名称约定的主要内容,如果未能解决你的问题,请参考以下文章

Grails - 使方法全局可用和元类编程

在引导程序中使用 groovy 元类模拟 Shiro SecurityUtils

什么是“按约定编码”?

groovy 和 grails 的编辑器? [关闭]

使用 Spock 进行 Grails 测试 - 选择哪个模拟框架?

通过 Groovy/Grails 检测平台(Window 或 Linux)