【问题标题】:Grails and Groovy metaclass package name conventionGrails 和 Groovy 元类包名称约定
【发布时间】: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 项目。

标签: grails groovy metaclass


【解决方案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 = {
    }
}

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

【讨论】:

    猜你喜欢
    • 2010-12-15
    • 2011-02-12
    • 2011-09-10
    • 2015-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    相关资源
    最近更新 更多