我将JSF Portlet与Liferay一起使用。在bean的构造器中,我创建了一些对象以及一些客户端来访问某些服务器。我不知道在刷新页面或重定向任何其他页面时应在哪里解构那些对象或使用垃圾收集器并关闭那些客户端。
感谢您的帮助。
最佳答案
不要使用构造函数。当然,如果您使用的是CDI,则不会。同样可以肯定的是,清理昂贵的资源时不要依赖GC。只需在所需方法上使用 @PostConstruct
和 @PreDestroy
批注。当bean作用域开始和结束时,bean管理框架都将单独显式调用它们。
public class Bean {
@PostConstruct
public void init() {
// ...
}
@PreDestroy
public void destroy() {
// ...
}
}
这对JSF和CDI托管Bean均适用。仅在JSF 2.0-2.1中使用
@ViewScoped
时,并不能保证在所有情况下均会调用@PreDestroy
。如果您在Servlet(即非Portlet)环境上使用CDI,则OmniFaces @ViewScoped
解决了JSF 2.0-2.1 @ViewScoped
@PreDestroy
失败的问题。
关于jsf - 在JSF中何处关闭打开的客户端或使用Java垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25543595/