2012-07-31 63 views
2

我希望能够根据此处定义的约定将我的元类放入groovy.runtime.metaclass包using the delegating meta class中。我已将MyClassMetaClass置于groovy.runtime.metaclass.mypackage.中,具体类别为mypackage.MyClass{}。不幸的是,拨打MyClass{}不会被MyClassMetaClass{}拦截。也许这与grails如何初始化有关?Grails和Groovy元类包名称约定

+0

看起来你一切都好。发布一些代码,以便我们可以获得更多信息。我现在可以想到的一件事是如果你扩展了DelegatingMetaClass。 – 2012-07-31 20:00:36

+1

@TiagoFarias我可以让MetaClass在正常的groovy项目中工作,但不能用于grails项目。 – Kurent 2012-08-01 13:28:20

回答

0

通过更改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 = { 
    } 
} 

Ofcourse这不像实现委托元问题提到的问题。