地图构造函数不适用于app destroy

时间:2016-08-22 09:46:45

标签: hibernate grails gorm

我的简单域类:

class TestDestroy {
    String x
}

一项服务:

class TestDestroyService implements DisposableBean {
    @Override
    void destroy() throws Exception {
        TestDestroy d = new TestDestroy(x: "x")
        println("Test destroy: ${d.x}")
    }
}

如果我从控制器调用destroy()方法,一切都很好,我得到输出:

Test destroy: x

在app关闭时调用destroy时出现问题,输出为:

2016-08-22 11:20:14.186:INFO:t.1:Destroying Spring FrameworkServlet 'grails'
Test destroy: null
2016-08-22 11:20:14.487:INFO:t.1:Closing Spring root WebApplicationContext
2016-08-22 11:20:14.496:INFO:oejsh.ContextHandler:stopped o.e.j.w.WebAppContext{ ...

这只发生在域类中,对于构造函数正常工作的其他groovy类。如果我用setter设置属性就行了。

对于使用带有地图构造函数的域类并且从destroy()

调用的代码,它通常很危险

设定:

groovy 2.4.4
hibernate4 4.3.6.1
jetty 8.1.9

1 个答案:

答案 0 :(得分:0)

为什么不使用grails bootstrap方法init和destroy。

bind

在destroy方法中,您可以执行任何操作。此外,如果您想要将代码与destroy进行分离,请创建一些服务然后调用它。