从Groovy 1.6开始,您可以在编译时将mixin应用于使用注释的类
@Mixin(ImagesMixin) class Person { }
或者您可以在运行时应用mixin,如下所示:
def myMixin = ImagesMixin Person.mixin myMixin
后一种方法更具动态性,因为mixin的类可以在运行时确定.有关Groovy mixins的更多信息,请点击此处.
根据我的经验,很多域类的元编程根本不起作用.我不知道为什么,但怀疑它是由于这些类已经由Grails运行时进行了大量的元编程.一般来说,我的方法是
在Groovy控制台中尝试POGO上的元编程
如果可行,请在Grails控制台中的非域类上尝试
如果可行,请在Grails控制台中的域类上尝试.如果它不起作用,那一定是因为它是一个域类(而不是语法问题).在这一点上,建议尝试找到另一种实现目标的方法.如果那是不可能的,那么使用Grails邮件列表和/或Stackoverflow和/或Grails源代码的组合来尝试使元编程工作.
我认为你没有使用正确的mixin语法.试试这个:
class MyMixin { static doStuff(Person) { 'stuff was done' } } class Person {} Person.mixin MyMixin new Person().doStuff()