使用JVM分叉时,Grails mixins无法正常工作

时间:2014-02-17 19:28:51

标签: grails grails-2.3

升级到Grails 2.3.5后,我发现我的mixins仅在JVM forking关闭时才有效。

我的所有控制器都有这样的代码

import util.MyMixin

@Mixin(MyMixin)
class MyController {

MyMixin中定义src/groovy/util并看起来像

package util

class MyMixin {
    private def aMethod(someArgs) {
        // do something
    }
}

BuildConfig.groovy包含以下代码

forkConfig = [maxMemory: 1024, minMemory: 64, debug: false, maxPerm: 256]
grails.project.fork = [
   test: forkConfig, // configure settings for the test-app JVM
   run: forkConfig, // configure settings for the run-app JVM
   war: forkConfig, // configure settings for the run-war JVM
   console: forkConfig // configure settings for the Swing console JVM
]

然后我收到以下错误

MissingMethodException occurred when processing request:
No signature of method: MyController.aMethod() is applicable for argument types

当参数类型匹配时,当我在BuildConfig.groovy中没有JVM分叉代码时,代码当然可以工作。

在分支JVM时,我需要做些什么才能让mixin工作?我只使用分叉,因为Grails 2.3.5推荐它,当我不使用它时我遇到了问题:Grails 2.3.5 requiring "grails clean" after every code change

1 个答案:

答案 0 :(得分:0)

我在使用Mixins和Grails Domain对象时遇到了困难,听到你对控制器的粗暴对待我并不感到惊讶。域,控制器和服务由Grails管理得如此严重,难怪正常的@Mixins可能会以某种方式被破坏。我已经成功地通过metaClass构建器DSL注入方法,如:

targetClass.metaClass {
    someMethod { someParam ->
        // do something
    }
}

你必须自己在所有目标类上调用它......它不像@Mixin那样优雅,但它似乎有效。