Inheritance 如何将拦截器链接在一起?
我有一个控制器,它从一个类继承,该类具有一个Inheritance 如何将拦截器链接在一起?,inheritance,grails,interceptor,Inheritance,Grails,Interceptor,我有一个控制器,它从一个类继承,该类具有一个beforeInterceptor 这是我的基础课 class FooBase { def beforeInterceptor = [action: {parentInterceptor()}] def parentInterceptor() { render("Snarge") } } 以下是无法工作的控制器版本 class BrokenController extends FooBase { de
beforeInterceptor
这是我的基础课
class FooBase {
def beforeInterceptor = [action: {parentInterceptor()}]
def parentInterceptor() {
render("Snarge")
}
}
以下是无法工作的控制器版本
class BrokenController extends FooBase
{
def beforeInterceptor = [action: {childInterceptor()}]
def childInterceptor() {
super.beforeInterceptor.action.call()
render("Bar")
}
def index = {
render("Foo")
}
}
这是一个可行的版本
当我在WorkingController
上调用index时,我得到了输出SnargeBarFoo
。当我在BrokenController
上调用index时,我得到一个IllegalAccessError
我想我有一个可行的版本,所以我的问题更多的是关于这里发生了什么?为什么一个版本可以从子类访问父类,而另一个版本不能
我正在寻找的用例是能够将拦截器函数与
功能一起使用,但
功能除外。这就要求在使用map实现拦截器时能够链接拦截器 两者之间存在差异
this.
及
以下代码有效-检查第三行:
class BrokenController extends FooBase
{
def beforeInterceptor = [action: {this&childInterceptor()}]
def childInterceptor() {
super.beforeInterceptor.action.call()
render("Bar")
}
def index = {
render("Foo")
}
}
文件对此作了如下说明&
Method Reference .& Get a reference to a method, can be useful for creating closures from methods
所以我不确定,但我想它与调用方法的范围有关。可能系统创建了某种类型的helper类来执行闭包,从而导致该类没有super.beforeInterceptor方法。您找到解决此问题的方法了吗?
class BrokenController extends FooBase
{
def beforeInterceptor = [action: {this&childInterceptor()}]
def childInterceptor() {
super.beforeInterceptor.action.call()
render("Bar")
}
def index = {
render("Foo")
}
}
Method Reference .& Get a reference to a method, can be useful for creating closures from methods