升级到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
答案 0 :(得分:0)
我在使用Mixins和Grails Domain对象时遇到了困难,听到你对控制器的粗暴对待我并不感到惊讶。域,控制器和服务由Grails管理得如此严重,难怪正常的@Mixins可能会以某种方式被破坏。我已经成功地通过metaClass构建器DSL注入方法,如:
targetClass.metaClass {
someMethod { someParam ->
// do something
}
}
你必须自己在所有目标类上调用它......它不像@Mixin那样优雅,但它似乎有效。