控制器在运行时重新编译时的grails回调

时间:2016-04-12 14:07:02

标签: grails gorm jit

我正在覆盖我编写的每个控制器的重定向方法。我做到了,因为

a)我需要在实际执行重定向之前设置一些变量

b)我想在全球范围内这样做,因为每个控制器的代码都是相同的,我想要干掉

我在引导程序中执行了此操作,因为它是在服务器启动时执行的。

代码:

grailsApplication.controllerClasses.each() { controllerClass ->
    if (controllerClass.fullName.startsWith("my.package")){
        def oldRedirect = controllerClass.metaClass.pickMethod("redirect", [Map] as Class[])
        controllerClass.metaClass.redirect = { Map args ->
            // pre-redirect logic
            args.put("some", "property")                
            oldRedirect.invoke delegate, args
            // post-redirect logic
        }
    }
}

问题在于:

当我开发时,我使用重新加载功能/只是及时编译器,它重新编译文件而无需重新启动服务器。在这种情况下,重建控制器,结果重写的重定向方法丢失。

以下是问题:

是否有回调/另一种方法来查明何时在运行时重新编译类?我想检查控制器是否重建,然后再次覆盖重定向方法!

1 个答案:

答案 0 :(得分:1)

是的,将此功能分解为插件,然后您可以观察重新加载类并重新应用更改。 documentation详细介绍了参与自动重装事件的情况。

这将是实现您所期望的最干净,最恰当的方式。