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 元类包名称约定的主要内容,如果未能解决你的问题,请参考以下文章
在引导程序中使用 groovy 元类模拟 Shiro SecurityUtils