grails - 在运行时重新编译 Controller 时,grails回调

标签 grails gorm jit

我正在覆盖我编写的每个 Controller 的重定向方法。我这样做是因为

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

b)我想在全局范围内这样做,因为每个 Controller 的代码都相同,所以我想干

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

码:

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
        }
    }
}

这是问题所在:

当我进行开发时,我使用了重载功能/即时编译器,它无需重新启动服务器即可重新编译文件。在这种情况下,将重建 Controller ,结果将丢失覆盖的重定向方法。

这是问题:

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

最佳答案

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

这将是完成您要完成的工作的最干净,最正确的方法。

关于grails - 在运行时重新编译 Controller 时,grails回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36575720/

相关文章:

grails - 是否可以在两个域类之间进行内部联接?

java - 反汇编 Java JIT 编译的原生字节码

java - JIT 编译器 - 编译器选择选项

c# - 强制 C# 编译器创建未使用的对象实例

grails - 无法将 GSP 参数绑定(bind)到 Controller 中的命令对象

grails - Grails 2.4.4-休眠异常

hibernate - 计算hasMany属性的长度

hibernate - 扩展域类导致奇怪的表布局和不可访问的字段

java - 在运行时动态创建实体 - Spring boot、hibernate、Java 或使用 Gorm orm 的 Grails?

grails - 具有hasMany的Grails类