我的简单域类:
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
答案 0 :(得分:0)
为什么不使用grails bootstrap方法init和destroy。
bind
在destroy方法中,您可以执行任何操作。此外,如果您想要将代码与destroy进行分离,请创建一些服务然后调用它。