我想在关闭CDI应用程序时对bean进行一些清理。例如,我想关闭IO连接。当然,在这里,bean被标记为@ApplicationScoped。
为了管理这个,我写了一个扩展并观察BeforeShutdown事件,然后我选择我的bean来调用一个清理方法:
public void beforeShutdown(@Observes BeforeShutdown beforeShutdown) {
SomeBean obj = CDI.current().select(SomeBean.class).get();
obj.cleanup();
}
我的问题是我可以访问此方法中的新实例。不是我在整个应用程序中得到的实例。
如果你想看到这个实例问题,我已经在github上创建了一个repo来显示它:https://github.com/hasalex/cdi-extension-demo。
所以我有两个问题:
答案 0 :(得分:4)
看这里:http://docs.jboss.org/cdi/spec/1.1.EDR1/html/spi.html#provider
11.5.4。 BeforeShutdown事件
容器必须在完成处理请求并销毁所有上下文后触发最终事件。
也许你想使用@PreDestroy:http://docs.oracle.com/javaee/6/tutorial/doc/gmgkd.html
使用javax.annotation.PreDestroy批注注释方法的声明。
CDI在开始销毁bean之前调用此方法。